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。我們要看看這個身份證是不是合法的身份證。
首先:我們計算37+49+010+55+…+1*2,前17位的乘積和是189
然後:用189除以11得出的結果是商17餘2
最後:通過對應規則就可以知道餘數2對應的數字是x。所以,這是一個合格的身份證號碼。

id_card=input('請輸入身份證號碼:')#存放身份證
jy = id_card[len(id_card)-1:len(id_card)]#該位是最後一位用於最後的比較
if len(id_card) == 18:#當你輸入身份證的時候必須是18位
    x= (7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2)#使用一個元組存放第1~17位的係數
    s=0#將這17位數字和係數相乘的結果相加,用s存放相加的結果
    for i in range(1,len(id_card)):
        e = id_card[i-1:i]#e依次爲身份證的位數
        s = s + int(e)*x[i-1]#這17位數字和係數相乘的結果相加,存放到s中
    b = s%11#相加的結果與11求模
    y=("1","O","x","9","8","7","6","5","4","3","2")#存放這些數對應的最後一位身份證的號碼
    c = y[b]#將所得的最後以爲身份證號碼賦值給c
    if jy == c:#最後所得的身份證號碼與實際輸入的身份證的最後一位進行對比比較
        print('經計算校驗碼爲',c,'和實際相同,身份證合法!')
    else:
        print('經計算校驗碼爲',c,'和實際不同,身份證不合法!')
else:#不是18爲結束並提示用戶
    print('身份證位數不對')

效果如如下:
在這裏插入圖片描述

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