帶大家寫個身份證信息查詢小工具呀~
↑?關注 + 星標?,每天學Python新技能
后臺回復【大禮包】送你Python自學大禮包
導
語
昨天發(fā)現(xiàn)一個身份證信息查詢的py包,感覺還算有點意思,于是過來分享一波,帶大家用pyqt5寫個身份證信息查詢小工具,這個小工具大概包括以下兩個功能吧:
驗證輸入的身份證號是否合法,如果合法則解析身份證號里包含的信息(地址,出生日期,性別,生肖等等);
根據(jù)輸入信息(出生日期等)生成一個假的身份證號。
廢話不多說,讓我們愉快地開始吧~
開
發(fā)
工
具
Python版本:3.6.4
相關模塊:
PyQt5模塊;
id-validator模塊;
以及一些python自帶的模塊。
環(huán)
境
搭
建
安裝Python并添加到環(huán)境變量,pip安裝需要的相關模塊即可。
原
理
簡
介
原理其實蠻簡單的,主要是借助id-validator這個第三方包來實現(xiàn)我們想要的功能。
首先pip安裝一下:
pip install id-validator接著,驗證身份證號是否合法的話只需要這樣做:
from?id_validator?import?validatorvalidator.is_valid('8ddd00199408230021')
獲取身份證號信息的話只需要這樣做:
validator.get_info('8ddd00199408230021')生成假的數(shù)據(jù)只需要這樣子:
validator.fake_id(True,?出生地區(qū),?出生日期,?性別)
做個無情的調包機器人就ok了,不需要什么腦子。其實實現(xiàn)的原理也很簡單,因為18位身份證號的構成是這樣子的:
地址碼:前6位, 比如北京的地址碼是110000出生日期碼:?第7到14位,?比如20001001順序碼:?第15到17位,?解釋參見https://zhuanlan.zhihu.com/p/21286417校驗碼:?第18位,?計算方式參見https://zhuanlan.zhihu.com/p/21286417
所以自己查點資料然后寫個包實現(xiàn)上面那個包有的功能其實并不難,感興趣的小伙伴可以自己試試。
接著,我們用PyQt封裝一下上面的功能:

點擊隨機生成按鈕會在身份證號欄的輸入框中隨機生成一個可以通過校驗的身份證號。查詢結果用來查看身份證號是否合法,以及如果合法的話,該身份證號所包含的信息的解析結果。
具體而言,核心代碼如下:
'''驗證并解析身份證號信息'''def CheckAndParseID(self):id_ = self.idcard_line_edit.text()is_valid = validator.is_valid(id_)if not is_valid:self.result_text_edit.setText('身份證號是否合法: 否\n身份證號信息: 無')returnshowinfo = '身份證號是否合法: 是\n'idinfos = validator.get_info(id_)key_to_showtext = {'address_code': '地址碼','abandoned': '地址碼是否廢棄(1是廢棄, 0是仍在使用)','address': '地址','birthday_code': '出生日期','constellation': '星座','chinese_zodiac': '生肖','sex': '性別',}for key, value in idinfos.items():if key not in key_to_showtext: continueshowinfo += f'{key_to_showtext[key]}: {value}\n'????self.result_text_edit.setText(showinfo)'''生成假的身份證號'''def generateID(self):birthday = self.birthday_line_edit.text().replace('-', '')birthday = birthday if birthday else Noneaddress = self.address_line_edit.text()address = address if address else Nonesex = self.sex_combobox.currentText()sex = 1 if sex == '男' else 0try:id_ = validator.fake_id(True, address, birthday, sex)except:id_ = validator.fake_id()self.idcard_line_edit.setText(id_)
大功告成~完整源代碼詳見相關文件唄。
效
果
展
示
在終端運行如下命令即可:
python idcardquer.py效果如下:
推薦閱讀
您看此文用? ?
?分?
?
秒,轉發(fā)只需1秒哦~
評論
圖片
表情

?
?分?
?
秒,轉發(fā)只需1秒哦~