Python實(shí)戰(zhàn)小項(xiàng)目之身份證信息校驗(yàn)
python小項(xiàng)目–身份證信息校驗(yàn)
目的
制作個(gè)程序,輸入身份證號碼,輸出如下信息
性別 : 男
地區(qū) : 福建省龍巖市永定縣
出生年月日: 2000年05月01日
出生當(dāng)日派出所登記的第 1 個(gè)男孩
校驗(yàn)碼: 0
身份證號真?zhèn)涡裕?真
所需文件與知識
- 身份證區(qū)域代碼.xls(已上傳)
- 身份證號碼組成
- 身份證校驗(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位 每位 乘以 對應(yīng)的權(quán)值 再求和
- 將結(jié)果對11取余數(shù)
- 根據(jù)余數(shù)找到對應(yīng)的校驗(yàn)碼
每一位對應(yīng)的權(quán)值(17位信息數(shù)據(jù),從左往右,第一位對應(yīng)7,第二位對應(yīng)9,以此類推)
weights=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
余數(shù)與校驗(yàn)碼對應(yīng)字典(2對應(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()
# 對身份證信息切片
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ù)對應(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("身份證號真?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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python?sklearn數(shù)據(jù)預(yù)處理之?dāng)?shù)據(jù)縮放詳解
數(shù)據(jù)的預(yù)處理是數(shù)據(jù)分析,或者機(jī)器學(xué)習(xí)訓(xùn)練前的重要步驟,這篇文章主要為大家詳細(xì)介紹了sklearn數(shù)據(jù)預(yù)處理中數(shù)據(jù)縮放的相關(guān)知識,感興趣的小伙伴可以學(xué)習(xí)一下2023-10-10
python3實(shí)現(xiàn)抓取網(wǎng)頁資源的 N 種方法
這兩天學(xué)習(xí)了python3實(shí)現(xiàn)抓取網(wǎng)頁資源的方法,發(fā)現(xiàn)了很多種方法,所以,今天添加一點(diǎn)小筆記。2017-05-05
python?apscheduler?cron定時(shí)任務(wù)觸發(fā)接口自動化巡檢過程
這篇文章主要介紹了python?apscheduler?cron定時(shí)任務(wù)觸發(fā)接口自動化巡檢過程,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
python中68個(gè)內(nèi)置函數(shù)的總結(jié)與介紹
這篇文章主要介紹了python中68個(gè)內(nèi)置函數(shù)的總結(jié)與介紹,需要的朋友可以參考下2020-02-02

