前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Python计算18位身份证号最后一位校验码(ISO 7064:1983.MOD 11-2)

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

作者头像
kr
发布2024-03-11 08:49:45
1610
发布2024-03-11 08:49:45
举报
文章被收录于专栏:个人教程个人教程

原理

校验算法有标准,叫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%11
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%11]

# 校验18位身份证号合法性
def VerifyLegality(idNum:str):
    idNum = idNum.upper()
    if Calculate_CheckCode(idNum[:-1]) == idNum[-1]:
        return True
    else:
        return False
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 原理
    • 计算方法
      • 1. 加权求和
      • 2. 取模运算
      • 3. 将取模结果转换为校验码
  • 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档