MOD 11,10算法(python版本)(GB/T 17710-1999 校验码算法)

时间:2024-03-18 18:15:03

一. 算法描述

MOD 11,10算法(python版本)(GB/T 17710-1999 校验码算法)

二. python代码实现

本代码经过多个实际食品经营许可证号码验证,确认正确,可直接复制使用

# 求Pn
def getPn(n, arr1):
    if n == 1:
        return 10
    else:
        return mod10(getSn(n - 1, arr1)) * 2

# 求特定的取余10的结果
def mod10(num):
    if num % 10 == 0:
        return 10
    else:
        return num % 10

# 求Sn
def getSn(n, arr1):
    return getPn(n, arr1) % 11 + int(arr1[14-n+1])

# 求校验码
def getCheckCode(code):
    c = code + 'x,'
    arr1 = []
    for i in reversed(c):
        arr1.append(i)
    for j in range(0, 10):
        arr1[1] = str(j)
        if getSn(14, arr1) % 10 == 1:
            result = ''.join(list(reversed(arr1)))
            return result[:len(result) - 1]

if __name__ == '__main__':
    # 前13位许可证号数字
    xkzCode = '1530825001410'
    # 全部14位许可证号
    print(getCheckCode(xkzCode))