Python實(shí)戰(zhàn)小項(xiàng)目之身份證信息校驗(yàn)
python小項(xiàng)目–身份證信息校驗(yàn)
目的
制作個(gè)程序,輸入身份證號(hào)碼,輸出如下信息
性別 : 男
地區(qū) : 福建省龍巖市永定縣
出生年月日: 2000年05月01日
出生當(dāng)日派出所登記的第 1 個(gè)男孩
校驗(yàn)碼: 0
身份證號(hào)真?zhèn)涡裕?真
所需文件與知識(shí)
- 身份證區(qū)域代碼.xls(已上傳)
- 身份證號(hào)碼組成
- 身份證校驗(yàn)碼算法
校驗(yàn)碼算法
- 18位身份證=17位信息數(shù)據(jù)+1位校驗(yàn)碼
1到6位 | 7到14位 | 15到16位 | 17位 | 18位 |
---|---|---|---|---|
區(qū)域代碼 | 出生年月日 | 登記所代碼 | 性別 | 校驗(yàn)碼 |
- 性別:男生為奇數(shù),女生為偶數(shù)
1表示第一個(gè)登記的男生
3表示第二個(gè)登記的男生
以此類推
校驗(yàn)算法詳解
- 1到17位 每位 乘以 對(duì)應(yīng)的權(quán)值 再求和
- 將結(jié)果對(duì)11取余數(shù)
- 根據(jù)余數(shù)找到對(duì)應(yīng)的校驗(yàn)碼
每一位對(duì)應(yīng)的權(quán)值(17位信息數(shù)據(jù),從左往右,第一位對(duì)應(yīng)7,第二位對(duì)應(yīng)9,以此類推)
weights=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
余數(shù)與校驗(yàn)碼對(duì)應(yīng)字典(2對(duì)應(yīng)羅馬數(shù)字“X”–十)
verification_dict={0:1, 1:0, 2:"X", 3:9, 4:8, 5:7, 6:6, 7:5, 8:4, 9:3, 10:2}
完整代碼展示(你可以自己先做)
import pandas as pd import numpy as np data = pd.read_excel('身份證區(qū)域代碼完整版.xls') # 讀取18位身份證 sfz=input() # 對(duì)身份證信息切片 position=int(sfz[0:6]) birthday=sfz[6:14] police_code=sfz[14:16] sex_code=int(sfz[16]) verification=int(sfz[17]) # 獲取區(qū)域名字,如福建省龍巖市永定縣 position_name=data.iloc[data.loc[data['代碼'] == position].index[0]]['名稱'] # 確定性別,并確定是該登記所第幾個(gè)登記的 def sex(n): train_list=[] male_list=[1,3,5,7,9] female_list=[0,2,4,6,8] if n in male_list: train_list.append('男') train_list.append(male_list.index(n)+1) else: train_list.append('女') train_list.append(female_list.index(n)+1) return train_list # 校驗(yàn)算法 weights=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2] sfz_code=[] for item in sfz: sfz_code.append(int(item)) weights_sfz=[] for i in sfz_code: for j in weights: weights_sfz.append(i*j) # 找到余數(shù) target=sum(weights_sfz)%11 verification_dict={0:1, 1:0, 2:"X", 3:9, 4:8, 5:7, 6:6, 7:5, 8:4, 9:3, 10:2} # 找到余數(shù)對(duì)應(yīng)的第18位校驗(yàn)碼 def verification_whether(target_n): return verification_dict[target_n] # 看看輸入的身份證校驗(yàn)碼和算出來的校驗(yàn)碼是否一致,如果不一致,則是假身份證 def verification_true_false(sfz_verification,target_n_whether): if sfz_verification == target_n_whether: return "真" else: return "假" # 將結(jié)果格式化打印出來 print("性別 :",sex(sex_code)[0]) print("地區(qū) :",position_name) print("出生年月日: {}年{}月{}日".format(birthday[0:4],birthday[4:6],birthday[6:8])) print("出生當(dāng)日派出所登記的第 {} 個(gè){}孩".format(sex(sex_code)[1],sex(sex_code)[0])) print("校驗(yàn)碼:",verification) print("身份證號(hào)真?zhèn)涡裕?,verification_true_false(verification,verification_whether(target)))
才疏學(xué)淺,代碼諸多不足,歡迎交流學(xué)習(xí)!
Jay Kwong
到此這篇關(guān)于Python實(shí)戰(zhàn)小項(xiàng)目之身份證信息校驗(yàn)的文章就介紹到這了,更多相關(guān)Python 身份證校驗(yàn)內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。