天天看點

python身份證号碼真假驗證

公民身份号碼是特征組合碼,由十七位數字本體碼和一位數字校驗碼組成。排列順序從左至右依次為:六位數字位址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。

身份證第18位(校驗碼)的計算方法

1、将前面的身份證号碼17位數分别乘以不同的 系數。 從第一位到第十七位的系數分别為:

7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。

2、将身份證前17位數字和系數相乘的結果相加。

3、用加出來和除以11,看餘數是多少?

4、餘數隻可能有0-1-2-3-4-5-6-7-8-9-10這11個數字。 其分别對應的最後 一位身份證的号碼為 1-0-X-9-8-7-6-5-4-3-2。

5、通過上面得知如果餘數是2,就會在身份證的第18位數字上出現羅馬數字的Ⅹ。如果餘數是10,身份證的最後一位号碼就是2。

#代碼

ID = input('請輸入十八位身份證号碼: ')
if len(ID) != 18:
    print("錯誤的身份證号碼")
else:
    print("你的身份證号碼是 " + ID)

    ID_check = ID[17]
    W = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
    ID_num = [18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2]
    ID_CHECK = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
    ID_aXw = 0
    for i in range(len(W)):
        ID_aXw = ID_aXw + int(ID[i]) * W[i]

    ID_Check = ID_aXw % 11
    if ID_check != ID_CHECK[ID_Check]:
        print('錯誤的身份證号碼')
    else:
        print('正确的身份證号碼')

        ID_add = ID[0:6]
        ID_birth = ID[6:14]
        ID_sex = ID[14:17]

        # ID_add是身份證中的區域代碼,如果有一個行政區劃代碼字典,就可以用擷取大緻位址#

        year = ID_birth[0:4]
        month = ID_birth[4:6]
        day = ID_birth[6:8]
        print("生日: " + year + '年' + month + '月' + day + '日')

        if int(ID_sex) % 2 == 0:
            print('性别:女')
        else:
            print('性别:男')

           
def a():
    ID = input('請輸入十八位身份證号碼: ')
    if len(ID) != 18:
        print("錯誤的身份證号碼")
        print("請重新輸入!")
        a()
    else:
        print("你的身份證号碼是 " + ID)
        ID_check = ID[17]
        W = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
        ID_num = [18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2]
        ID_CHECK = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
        ID_aXw = 0
        for i in range(len(W)):
            ID_aXw = ID_aXw + int(ID[i]) * W[i]
        ID_Check = ID_aXw % 11
        if ID_check != ID_CHECK[ID_Check]:
            print('錯誤的身份證号碼')
            a()
        else:
            print('正确的身份證号碼')
            ID_add = ID[0:6]
            ID_birth = ID[6:14]
            ID_sex = ID[14:17]
            year = ID_birth[0:4]
            month = ID_birth[4:6]
            day = ID_birth[6:8]
            print("生日: " + year + '年' + month + '月' + day + '日')
            if int(ID_sex) % 2 == 0:
                print('性别:女')
            else:
                print('性别:男')
if __name__ == "__main__":
    a()