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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值