1. 程式人生 > >身份證尾號Python校驗

身份證尾號Python校驗

身份證18位

 六位數字地址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。

地址碼錶示編碼物件常住戶口所在縣(市、旗、區)的行政區劃程式碼。

生日期碼錶示編碼物件出生的年、月、日,其中年份用四位數字表示,年、月、日之間不用分隔符。順序碼錶示同一地址碼所標識的區域範圍內,對同年、月、日出生的人員編定的順序號。

順序碼的奇數分給男性,偶數分給女性。

 

校驗碼根據前17位的數字生成,python生成校驗位的演算法如下:

校驗碼可能出現X的情況,代表校驗碼為10

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