自动化脚本-社会信用代码生成

duroheng / 2023-08-07 / 原文

import random
import string
def generate_uscc():
    
    department_codes = ["1", "5", "9"]
    department_code = random.choice(department_codes)


    category_codes = ["1", "2", "3", "9"]
    category_code = random.choice(category_codes)
    
    
    administrative_division_codes = ["110000", "120000", "130000", "140000", "150000", "210000", "220000", "230000", "310000", "320000", "330000", "340000", "350000", "360000", "370000", "410000", "420000", "430000", "440000", "450000", "460000", "500000", "510000", "520000", "530000", "540000", "610000", "620000", "630000", "640000", "650000", "710000", "810000", "820000"]
    administrative_division_code = random.choice(administrative_division_codes)
    
    test_str = '0123456789ABCDEFGHJKLMNPQRTUWXY'
    organization_code = ''.join(random.sample(test_str + string.digits, 9))
    sc =department_code + category_code + administrative_division_code + organization_code
    codeDict = {
        '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};
    
    weights = ['1', '3', '9', '27', '19', '26', '16', '17', '20', '29', '25', '13', '8', '24', '10', '30', '28'];
    sum = 0
    
    for i in range(len(sc)):
        sum += codeDict[sc[i]] * int(weights[i]);
    
    mod = 31 - sum % 31
    
    
    def getKey(codeDict, mod):
        result = ''
        for key in codeDict:
            if codeDict[key] == mod:
                result = key
        if (len(result) != 0):
            return result
    mod_2 = getKey(codeDict, mod)
    # print(mod_2)
    return department_code + category_code + administrative_division_code + organization_code + mod_2


license = generate_uscc()
vars.put("licenseno_qy",license);