身份證18位python
六位數字地址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。算法
地址碼錶示編碼對象常住戶口所在縣(市、旗、區)的行政區劃代碼。編碼
生日期碼錶示編碼對象出生的年、月、日,其中年份用四位數字表示,年、月、日之間不用分隔符。順序碼錶示同一地址碼所標識的區域範圍內,對同年、月、日出生的人員編定的順序號。code
順序碼的奇數分給男性,偶數分給女性。對象
校驗碼根據前17位的數字生成,python生成校驗位的算法以下:ip
校驗碼可能出現X的狀況,表明校驗碼爲10string
def generate_check_bit(string): #輸入身份證前17位,生成最後校驗位 s = map(int, string) a = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] b = sum(map(lambda x: x[0] * x[1], zip(a, s))) c = b % 11 d = ['1', '0', 'x', '9', '8', '7', '6', '5', '4', '3', '2'] return d[c] if __name__=="__main__": print(generate_check_bit('22132119880830001') ) # 1 print(generate_check_bit('32010519820927512') ) # 7