python计算身份证校验位

        python能够直接调用现成的函数对相关数据进行运算,这就是python最便捷的原因之一。通常,每个人的身份证号是18位,前17位分别为所在地身份证编号、出生日期、等级流水号,现在要根据以上17位计算第18位校验位,

计算方法如下:

        校验码的生成规则如下: 身份证号码 17 位数分别乘以不同的系数,第 1~17 位的系数分别为:7, 9,10,5,8, 4, 2,1,6,3,7, 9,10, 5, 8,4, 2,将这 17 位数字和系数相乘的结果相加,用相加的结果与 11 求模,余数结果只可能是 0,1,2, 3,4,5,6,7,8,9,10 这 11 个数字,它们分别对应的最后一位身 份证的号码为 1,0,x,9,8,7,6,5,4,3,2。例如,如果余数是 2,最后一位数字就是 X,如果余 数是 10,则身份证的最后一位就是 2。

则代码如下:

#coding utf-8

num = input("请输入1-17位身份证号码:")
xishu = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
qiumo = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]
sum = 0
for i in range(17):
    sum += int(num[i])*int(xishu[i])
yu = sum%11
yanzheng = qiumo[yu]
print("验证码为:%s"%yanzheng)
print("身份证号码为:%s%s"%(str(num),str(yanzheng)))

有如下实例:

        小明想通过社会工程学获得某人的身份证号码,现已知该人所在地身份证编号为 510823,出生年月日为 1998 年 10 月 20 日,身份证号码中的第 15~17 位登记流水号为 278,请计算最后一位校验码。则该人的身份证号前17位分别为51082319981020278,则第18位校验位计算结果:

则可以得到完整的身份证号位51082319981020278x。 

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
身份证校验码是用来验证身份证号码是否有效的一位数字。校验码是通过对身份证号码的前17位数字按照一定的算法进行处理得到的。如果身份证号码最后一位与计算出的校验码不一致,那么该身份证就是无效的。 下面是使用Python实现身份证校验码的示例代码: ```python def validate_id_card(id_card): # 将身份证号码的前17位转换为整数列表 id_list = [int(x) for x in id_card[:17]] # 加权因子 weight_factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] # 校验码对应值 check_code_dict = { 0: '1', 1: '0', 2: 'X', 3: '9', 4: '8', 5: '7', 6: '6', 7: '5', 8: '4', 9: '3', 10: '2' } # 计算身份证号码前17位与加权因子的乘积之和 sum = 0 for i in range(17): sum += id_list[i] * weight_factor[i] # 取模得到校验码对应的值 check_code = check_code_dict[sum % 11] # 判断身份证号码的校验码是否正确 if check_code == id_card[17]: return True else: return False # 调用函数进行身份证校验 id_card = '110101199001011234' # 身份证号码 result = validate_id_card(id_card) print(result) # 输出:True ``` 这段代码中,我们定义了一个`validate_id_card`函数,该函数接收一个身份证号码作为参数,并返回一个布尔值,表示该身份证号码是否有效。函数内部首先将身份证号码的前17位转换为整数列表,然后根据加权因子和校验码对应值的规则计算出校验码,最后判断身份证号码的校验码是否与计算出的校验码一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖锤喵喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值