身份證號升位
描述
第二代居民身份證是依據2003年6月28日第十屆全國人大常委會第3次會議通過的《中華人民共和國居民身份證法》實施的。第一代身份證十五位數升為第二代身份證十八位數的一般規則是:
第一步,在原十五位數身份證的第六位數后面插入19 (1905年1月1日以后出生)或20(2000.1.1-2004.12.31出生),這樣身份證號碼即為十七位數;
第二步,按照國家規定的統一公式計算出第十八位數,作為校驗碼放在第二代身份證的尾號。
校驗碼計算方法:將身份證前十七位數分別乘以不同系數並求和
S = Sum(Ai * Wi)
Ai:表示第i位置上的身份證號碼數字值, i = 0, ... , 16
Wi:表示第i位置上的加權因子,Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
S對11取模得到余數0-10,對應的校驗碼如下:
余數 Y: 0 1 2 3 4 5 6 7 8 9 10
校驗碼: 1 0 X 9 8 7 6 5 4 3 2
#題目假設所有人均出生於1905年1月1日以后,2005年1月1日以前
輸入格式
輸入一個15位身份證號
輸出格式
輸出一個18位身份證號
輸入輸出示例
輸入 輸出
310112850409522 310112198504095227
代碼
Y = {0:'1',1:'0',2:'X',3:'9',4:'8',5:'7',6:'6',7:'5',8:'4',9:'3',10:'2'} Wi = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2] id = input() if int(id[6:8]) < 5: id = id[0:6]+"20"+id[6:] else: id = id[0:6]+"19"+id[6:] s = 0 for i in range(0,17): s = s + int(id[i]) * Wi[i] id = id + Y[s%11] print(id)