大家好哇,又是一個(gè)愉快的周末,今天本鳥給大家分享1個(gè)有趣的實(shí)戰(zhàn)項(xiàng)目,用python制作“全國身份證號驗(yàn)證及查詢系統(tǒng)”,成品界面如下圖: 本系統(tǒng)可以實(shí)現(xiàn)身份證號真?zhèn)悟?yàn)證,年齡、性別及發(fā)證地查詢,看起來是不是很高大上,其實(shí)做起來不是很復(fù)雜,涉及知識主要有python字符串處理、表格讀寫和Gui制作,適合有一定python基礎(chǔ)的朋友練手,下面一起來看看怎么實(shí)現(xiàn)的吧! 第一步:身份證號解析 身份證號一般由18位號碼組成,前6位為地址碼,第7至14位為出生日期碼,第15至17位為順序碼,第18位為校驗(yàn)碼。6位地址碼為編碼對象戶口所在縣(市、區(qū))的行政區(qū)劃代碼;8位出生日期碼為出生年月日;3位順序碼為縣(市、區(qū))所轄派出所的分配碼,順序碼的奇數(shù)分配給男性,偶數(shù)分配給女性;1位校驗(yàn)碼是按統(tǒng)一公式計(jì)算出來的。 第二步:歸類整理地址碼與區(qū)縣對應(yīng)關(guān)系 這個(gè)網(wǎng)上比較常見,隨便搜索1個(gè)身份證號都會返回所在的區(qū)縣地址,我們要做的是把所有的對應(yīng)關(guān)系都找到,恰巧網(wǎng)上已經(jīng)有現(xiàn)成的了,不過要稍加整理,大家可以去網(wǎng)上找一下,但是要擦亮眼睛啊,有一個(gè)版本是錯(cuò)的,實(shí)在找不到的可以聯(lián)系我,我已經(jīng)整理好存入表格中 第三步:驗(yàn)證身份證號真?zhèn)?/p> 身份證最后一位校驗(yàn)碼算法如下: ①將身份證號碼前17位數(shù)分別乘以不同的系數(shù),從第1位到第17位的系數(shù)分別為:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 ②將得到的17個(gè)乘積相加。 ③將相加后的和除以11并得到余數(shù)。 ④余數(shù)可能為0 1 2 3 4 5 6 7 8 9 10這些個(gè)數(shù)字,其對應(yīng)的身份證最后一位校驗(yàn)碼為1 0 X 9 8 7 6 5 4 3 2。 代碼實(shí)現(xiàn)如下: 第四步:查詢地區(qū) 規(guī)則參考第一步,python兩行代碼就搞定了 不得不說,python就是簡單方便 第五步:計(jì)算出年齡及性別 規(guī)則同樣參考第一步,代碼如下: 到此為止,項(xiàng)目的主體功能已經(jīng)實(shí)現(xiàn),下面要想辦法用GUI界面實(shí)現(xiàn)。 第六步:制作GUI界面 本步驟主要用PyQt5實(shí)現(xiàn),下面我把核心代碼貼出來: 首先是以網(wǎng)格方式對標(biāo)簽及文本框進(jìn)行布局,并用setStyleSheet對文本框進(jìn)行修飾 然后是設(shè)置查詢按鈕并布局,再與check函數(shù)(信號)綁定 接著是在check函數(shù)中將查詢到的結(jié)果在文本框中顯示出來 最后設(shè)置主窗口圖片背景 到此為止,本項(xiàng)目就大功告成了,你學(xué)會了嗎? 但是要聲明一下,本文所介紹的查詢功能均為正向查詢,即在已知身份證號的前提下,解析原則來源于網(wǎng)絡(luò),不敢保證100%準(zhǔn)確,更不能反向推算出個(gè)人身份證號,所以不涉及侵犯隱私問題 |
|