简介
从1999年10月1日起,全国实行公民身份证号码制度,居民身份证编号由原15位升至18位:
- 前6位为地址码;
- 第7位至14位为出生日期码,其中年份用4位数表示;
- 第15位至17位为顺序码;
- 第18位为校验码,主要是为了校验计算机输入公民身份证号码的前17位数字是否正确,其取值范围是0至10,当值等于10时,用罗马数字符
X
表示。
校验码的计算方法
- 将前面的身份证号码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,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2。
代码实现
lis = list(input('请输入身份证号码:'))
ten = ['X', 'x', 'Ⅹ']
ID = ["10" if x in ten else x for x in lis] #将罗马数字Ⅹ和字母X替换为10
W = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
Checkcode = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]
sum = 0
for i in range(17): #https://blog.zeruns.tech
sum = sum + int(ID[i]) * W[i]
if Checkcode[sum % 11] == int(ID[17]):
print('输入正确')
else:
print('输入错误')