统一社会信用代码的具体赋码规则如下:
第一部分(第1位):登记管理部门代码。暂按国务院序列规则,5表示民政部门。
第二部分(第2位):机构类别代码。“1”表示社会团体、“2”表示民办非企业单位、“3”表示基金会、“9”表示其他。
前两位的含义如下:
机构编制机关:11打头
机构编制事业单位:12打头
机构编制中央编办直接管理机构编制的群众团体:13打头
机构编制其他:19打头
民政社会团体:51打头
民政民办非企业单位:52打头
民政基金会:53打头
民政其他:59打头
工商企业:91打头
工商个体工商户:92打头
工商农民专业合作社:93打头
其他:Y1打头
第三部分(第3-8位):登记管理机关行政区划码,参照GB/T 2260中华人民共和国行政区划代码标准。(登记机关所在地的行政区划)。
第四部分(第9-17位):主体标识码(组织机构代码),其中第17位为主体标识码(组织机构代码)的校验码。第17位校验码算法规则按照《全国组织机构代码编制规则》(国标GB11714—1997)计算。
第五部分(第18位):统一社会信用代码的校验码。第18位校验码算法规则按照《GB -2015 法人及其他组织统一社会信用代码编制规则》计算。
统一社会信用代码需要包含组织机构代码,下面的代码是先随机生成信用代码的前两位,再手动录入地区行政区域代码,再随机生成组织机构代码,这样就得到统一社会信用编码的前十七位,最后再计算其校验位得到完整的统一社会信用代码。
import random
def unified_social_credit_code(uCode):
'''
根据输入的前十七位数字,计算统一社会信用编码的校验位,并返回包含校验通过码的完整统一信用代码
'''
uCode_list = list(uCode)
# 统一社会信用编码字母对应的数字
unified_digital_map = {
'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,
"0": 0, "1": 1, "2": 2, "3": 3, "4": 4,
"5": 5, "6": 6, "7": 7, "8": 8, "9": 9
}
# 统一社会信用编码位置的权值
W = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28]
#统一社会信用代码的校验位取值
umod = ['0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F','G','H','J','K',
'L','M','N','P','Q','R','T','U','W','X','Y','0'
]
# 计算统一社会信用代码的校验位
sum = 0
for i in range(17):
sum = sum + int(unified_digital_map[uCode_list[i]]) * W[i]
C18 = 31 - sum % 31
uCode = uCode + umod[C18]
return uCode
def random_organization_code():
'''
随机生成九位组织机构代码
'''
o_digital_map = {
'A': 10, 'B': 11, 'C': 12, 'D': 13, 'E': 14, 'F': 15, 'G': 16,
'H': 17, 'I': 18, 'J': 19, 'K': 20, 'L': 21, 'M': 22, 'N': 23,
'O': 24, 'P': 25, 'Q': 26, 'R': 27, 'S': 28, 'T': 29,
'U': 30, 'V': 31, 'W': 32, 'X': 33, 'Y': 34, 'Z': 35,
'0': 0, '1': 1, '2': 2, '3': 3, '4': 4,
'5': 5, '6': 6, '7': 7, '8': 8, '9': 9
}
# 组织机构代码的权值
oW = [3, 7, 9, 10, 5, 8, 4, 2]
# 组织机构代码的校验位
oMOD = ['0', 'X', '9', '8', '7', '6', '5', '4', '3', '2', '1']
# 随机生成九位字母或数字(不能包含I、O、Z、S、V)
oCode = ''.join(random.sample('0123456789ABCDEFGHJKLMNPQRTUWXY', 9))
# 替换第九位为正确的校验位
sum = 0
for i in range(8):
sum = sum + int(o_digital_map[oCode[i]]) * oW[i]
oCode = oCode.replace(oCode[8], oMOD[sum % 11])
return oCode
if __name__ == '__main__':
# 随机生成机构类型代码
classCode = random.choice(['11', '12', '13', '19', '51', '52', '53', '59', '91', '92', '93', 'Y1'])
# 输入行政区域代码
areCode = input("请输入6位行政区域编码(如南京320100):")
#随机生成组织机构代码
organCode = random_organization_code()
# print(classCode + areCode + organCode)
uCode = unified_social_credit_code(classCode + areCode + organCode)
# uCode = unified_social_credit_code('53420000503589224')
print(uCode)
随机生成车架号
import random
import time
# import radar
# 车架号不应有字母O、I、Q,请调整为数字0或1
def random_vin():
'''随机生成车架号'''
# 车架号字母对应的数字
vin_digital_map = {
'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5,
'F': 6, 'G': 7, 'H': 8, 'I': 0, 'J': 1, 'K': 2, 'L': 3,
'M': 4, 'N': 5, 'O': 0, 'P': 7, 'Q': 8, 'R': 9, 'S': 2, 'T': 3,
'U': 4, 'V': 5, 'W': 6, 'X': 7, 'Y': 8, 'Z': 9, "0": 0, "1": 1,
"2": 2, "3": 3, "4": 4, "5": 5, "6": 6, "7": 7, "8": 8, "9": 9
}
# 位置的权值
location_map = [8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2]
#随机生成17位车架号,不包含I、O、Q
vin = ''.join(random.sample('0123456789ABCDEFGHJKLMPRSTUVWXYZ', 17))
#替换校验位
sum = 0
for i in range(len(vin)):
sum = sum + vin_digital_map[vin[i]] * location_map[i]
vin9 = sum % 11
if vin9 == 10:
vin = vin.replace(vin[8],'X')
else:
vin = vin.replace(vin[8],str(vin9))
return vin
print(random_vin())