(Python)身份证号合法性判别

416 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

【问题描述】我国身份证号码由数字与字母混合组成。早期身份证由15位数字构成,后来考虑到千年虫问题(15位的身份证号码只能为1900年1月1日到1999年12月31日出生的人编号),所以又增加了18位身份证号码编号规则。最后一位(第18位)校验码的计算方法如下: 第一步:将身份证前17位数分别乘以不同的系数。从第1位到第17位的系数分别为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2,将17位数字和系数相乘的结果相加。 第二步:将上一步结果除以11求余数,则余数只可能是0-10,身份证最后一位的对应字符为1、0、X、9、8、7、6、5、4、3、2。 例如余数结果为3,则对应身份证号码的最后一位就是9,如果是10,身份证最后一位便是2。 请根据上述算法判断输入的身份证号是否合法。

【输入形式】一行18位的字符串,代表一个身份证号

【输出形式】如果输入的是合法身份证号,请输出“YES”,否则输出“NO”

【样例输入】110000000000000000

【样例输出】NO

【样例说明】不合法身份证号,输出“NO”

实现代码:

 a = input()  
 s = 0  
 coefficient = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]  
 correspondingCharacter = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]  
 ​
 for i in range(17):  
     s += int(a[i]) * coefficient[i]
 ​
 s %= 11  
 ​
 if a[17] == str(correspondingCharacter[s]):
     print("YES")
 else:
     print("NO")
 ​

运行结果:

在这里插入图片描述 在这里插入图片描述