使用Python计算18位身份证号最后一位校验码(ISO 7064:1983.MOD 11-2)

2024-03-11 08:49:45 浏览数 (2)

原理

校验算法有标准,叫ISO 7064:1983.MOD 11-2,这里简述下方法

计算方法

1. 加权求和

前17位分别与如下数相乘,然后相乘结果相加,得到一个总数num

代码语言:javascript复制
[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
2. 取模运算

ps. 取模运算是求两个数相除的余数。

将对上面的结果num对11取模,得到modNum

用代码可以表示成这样:

代码语言:javascript复制
modNum = num
3. 将取模结果转换为校验码

取模会得到一个0到10的整数,他们分别对应下面的校验码:

代码语言:javascript复制
["1","0","X","9","8","7","6","5","4","3","2"]

注意从0开始,也就是取模结果为0校验码为1、取模结果为2校验码为X,以此类推

代码

代码语言:javascript复制
# 放入前17位身份证号,计算末尾校验码
def Calculate_CheckCode(idNumTop17:str):
    weight = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
    checkCodeList = "10X98765432"
    index = 0
    num = 0
    for n in idNumTop17:
        num = num   int(n)*weight[index]
        index = index   1
    return checkCodeList[num]

# 校验18位身份证号合法性
def VerifyLegality(idNum:str):
    idNum = idNum.upper()
    if Calculate_CheckCode(idNum[:-1]) == idNum[-1]:
        return True
    else:
        return False

0 人点赞