您好,登錄后才能下訂單哦!
這篇文章主要介紹“Python實戰小項目之如何實現身份證信息校驗”,在日常操作中,相信很多人在Python實戰小項目之如何實現身份證信息校驗問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python實戰小項目之如何實現身份證信息校驗”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
制作個程序,輸入身份證號碼,輸出如下信息
性別 : 男
地區 : 福建省龍巖市永定縣
出生年月日: 2000年05月01日
出生當日派出所登記的第 1 個男孩
校驗碼: 0
身份證號真偽性: 真
身份證區域代碼.xls(已上傳)
身份證號碼組成
身份證校驗碼算法
18位身份證=17位信息數據+1位校驗碼
1到6位 | 7到14位 | 15到16位 | 17位 | 18位 |
---|---|---|---|---|
區域代碼 | 出生年月日 | 登記所代碼 | 性別 | 校驗碼 |
性別:男生為奇數,女生為偶數
1表示第一個登記的男生
3表示第二個登記的男生
以此類推
1到17位 每位 乘以 對應的權值 再求和
將結果對11取余數
根據余數找到對應的校驗碼
每一位對應的權值(17位信息數據,從左往右,第一位對應7,第二位對應9,以此類推)
weights=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
余數與校驗碼對應字典(2對應羅馬數字“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('身份證區域代碼完整版.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]) # 獲取區域名字,如福建省龍巖市永定縣 position_name=data.iloc[data.loc[data['代碼'] == position].index[0]]['名稱'] # 確定性別,并確定是該登記所第幾個登記的 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 # 校驗算法 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) # 找到余數 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} # 找到余數對應的第18位校驗碼 def verification_whether(target_n): return verification_dict[target_n] # 看看輸入的身份證校驗碼和算出來的校驗碼是否一致,如果不一致,則是假身份證 def verification_true_false(sfz_verification,target_n_whether): if sfz_verification == target_n_whether: return "真" else: return "假" # 將結果格式化打印出來 print("性別 :",sex(sex_code)[0]) print("地區 :",position_name) print("出生年月日: {}年{}月{}日".format(birthday[0:4],birthday[4:6],birthday[6:8])) print("出生當日派出所登記的第 {} 個{}孩".format(sex(sex_code)[1],sex(sex_code)[0])) print("校驗碼:",verification) print("身份證號真偽性:",verification_true_false(verification,verification_whether(target)))
到此,關于“Python實戰小項目之如何實現身份證信息校驗”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。