【问题描述】我国身份证号码由数字与字母混合组成。早期身份证由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”
【评分标准】共5个测试用例,全部通过为满分`
a = input()
alist = []
for i in range(0, 17):
alist.append(a[i])
alist = [int(x) for x in alist]
s = 7 * alist[0] + 9 * alist[1] + 10 * alist[2] + 5 * alist[3] + 8 * alist[4] + 4 * alist[5] + 2 * alist[6] + 1 * alist[
7] + 6 * alist[8] + 3 * alist[9] + 7 * alist[10] + 9 * alist[11] + 10 * alist[12] + 5 * alist[13] + 8 * alist[
14] + 4 * alist[15] + 2 * alist[16]
if s % 11 == 0 and int(a[17]) == 1:
print("YES")
elif s % 11 == 1 and a[17] == "0":
print("YES")
elif s % 11 == 3 and a[17] == "9":
print("YES")
elif s % 11 == 4 and a[17] == "8":
print("YES")
elif s % 11 == 5 and a[17] == "7":
print("YES")
elif s % 11 == 6 and a[17] == "6":
print("YES")
elif s % 11 == 7 and a[17] == "5":
print("YES")
elif s % 11 == 8 and a[17] == "4":
print("YES")
elif s % 11 == 9 and a[17] == "3":
print("YES")
elif s % 11 == 10 and a[17] == "2":
print("YES")
elif s % 11 == 2 and a[17] == "X":
print("YES")
else:
print("NO")