随机生成车架号、统一社会信用代码和组织机构代码

统一社会信用代码的具体赋码规则如下:
第一部分(第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())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值