python身份證號碼校驗

中華人民共和國居民身份證號碼由17 位數字和1位校驗碼組成。其中,前6位爲所在地編號,第7~14 位爲出生年月日,第15~17位爲登記流水號,其中第17位偶數爲女性,奇數爲男性。校驗碼的生成規則如下:

將前面的身份證號碼17位數分別乘以不同的係數。第1~17位的係數分別爲: 7,9,10,5,8 4,2,1,6,3,7,9,10,5,8,4,2,將這17 位數字和係數相乘的結果相加,用相加的結果與11求模,餘數結果只可能是0,1,2,3,4,5,6,7,8,9,10這11個數字,它們分別對應的最後一位身份證的號碼爲1,0,x,9,8,7,6,5,4,3,2。例如,如果餘數是2,最後一位數字就是羅馬數字x,如果餘數是10,則身份證的最後一位就是2。

請設計程序實現輸入18位身份證號,辨別其真僞。若爲真,則進一步判斷性別: 若不是18位或身份證號非法,則提示重新輸入。

提示:定義如下兩個元組,對輸入字符串進行遍歷。

factor=(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2)

last=("1","O","x","9","8","7","6","5","4","3","2")

例如:某男性的身份證號碼是34052419800101001X。我們要看看這個身份證是不是合法的身份證。

首先:我們計算3*7+4*9+0*10+5*5+...+1*2,前17位的乘積和是189

然後:用189除以11得出的結果是商17餘2

最後:通過對應規則就可以知道餘數2對應的數字是x。所以,這是一個合格的身份證號碼。

Init_Id = input("請輸入身份證號碼:")
if len(Init_Id) != 18:
    print("身份證號碼不是18位,請重新輸入!")
else:
    Id = Init_Id.replace('X', '')
    c = map(int, Id)
    Id = tuple(c)
    n = 17
    Sum = 0
    factor = (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
    last = (1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2)
    for i in range(17):
        Sum += Id[i] * factor[i]
    check = Sum % 11
    check_Id = last[check]
    if Init_Id[17] == 'X':
        if check_Id != Init_Id[17]:
            print("身份證號碼非法,請重新輸入!")
        else:
            if Id[16] % 2 == 0:
                print("此身份證號碼合法,是位女性的身份證號碼.")
            else:
                print("此身份證號碼合法,是位男性的身份證號碼.")
    else:
        if check_Id != Id[17]:
            print("身份證號碼非法,請重新輸入!")
        else:
            if Id[16] % 2 == 0:
                print("此身份證號碼合法,是位女性的身份證號碼.")
            else:
                print("此身份證號碼合法,是位男性的身份證號碼.")

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章