本文已参与「新人创作礼」活动,一起开启掘金创作之路。
【问题描述】我国身份证号码由数字与字母混合组成。早期身份证由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")
运行结果: