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。