# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
import pymysql
SOCIAL_CREDIT_CHECK_CODE_DICT = {
'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,
'A':10,'B':11,'C':12, 'D':13, 'E':14, 'F':15, 'G':16, 'H':17, 'J':18, 'K':19, 'L':20, 'M':21, 'N':22, 'P':23, 'Q':24,
'R':25, 'T':26, 'U':27, 'W':28, 'X':29, 'Y':30}
weighting_factor = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28]
# 本体代码
def check_social_credit_code(code):
check_code = code[17]
# 计算校验码公式:
# C9 = 31-mod(sum(Ci*Wi),31),其中Ci为组织机构代码的第i位字符,Wi为第i位置的加权因子,C9为校验码
# 第i位置上的加权因子
ontology_code = code[0:17]
# 计算校验码
tmp_check_code = gen_check_code(weighting_factor, ontology_code, 31, SOCIAL_CREDIT_CHECK_CODE_DICT)
if tmp_check_code == check_code:
return 1
else:
return 0
def gen_check_code(weighting_factor, ontology_code, modulus, check_code_dict):
# @param weighting_factor: 加权因子
# @param ontology_code:本体代码
# @param modulus: 模数
# @param check_code_dict: 字符字典
total = 0
for i in range(len(ontology_code)):
if ontology_code[i].isdigit():
total += int(ontology_code[i]) * weighting_factor[i]
else:
total += check_code_dict[ontology_code[i]] * weighting_factor[i]
#当MOD函数值为0时,校验码用0表示
if modulus - total % modulus == 31:
return list(check_code_dict.keys())[list(check_code_dict.values()).index(0)]
else:
diff = modulus - total % modulus
print(diff)
return list(check_code_dict.keys())[list(check_code_dict.values()).index(diff)]
dbconn = pymysql.connect(
host="172.16.3.23",
database="test_srz",
user="test_srz",
password="test_srz123",
port=31229,
charset='utf8'
)
sqlcmd = "select qymc from shtyxydmyz"
a = pd.read_sql(sqlcmd, dbconn)
zchdjh = np.array(a)
print(zchdjh)
for n in range(len(zchdjh)):
m = zchdjh[n]
for o in range(len(m)):
p = m[o]
q = check_social_credit_code(p)
cursor = dbconn.cursor()
#第一种结果处理方法,在原表基础上增加状态
cursor.execute("update shtyxydmyz set zt = %s where qymc ='%s'" % (q, p))
#第二种方法,合格的导入emp2,不合格的导入emp3.
# if q==1:
# cursor.execute("insert into emp2(xydm) values(%s)", (p))
# else:
# cursor.execute("insert into emp3(xydm) values(%s)", (p))
dbconn.commit()
cursor.close()