一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:
首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:
Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2
ps:有点繁琐
import functools
l1=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
l2=['1','0','X','9','8','7','6','5','4','3','2']
a=int(input())
ll=[];
for i in range(a):
*s,p=input()
if(not "".join(s).isdigit() or l2[functools.reduce(lambda acc,x:acc+x[0]*int(x[1]),zip(l1,s),0)%11]!=p): ll.append("".join(s)+p)
print("All passed" if not len(ll) else "\n".join(ll))