導航:首頁 > 編程語言 > python身份證實名認證代碼

python身份證實名認證代碼

發布時間:2023-02-11 23:57:01

1. python身份證號換成***

最近工作中剛好要清洗一批客戶數據,涉及到身份證號碼15位和18位的轉換,特意研究了下,在這里分享下。
身份證號碼的構成
既然談到了身份證轉換,那就需要先了解下證件號碼的構成。

公民身份號碼是特徵組合碼,由 十七位數字本體碼 和 一位數字校驗碼 組成;
排列順序從左至右依次為:六位數字地址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。
六位數字地址碼:表示編碼對象常住戶口所在縣(市、旗、區)的行政區劃代碼,按GB/T 2260 的規定執行。
八位數字出生日期碼:表示編碼對象出生的年、月、日,按 GB/T 7408 的規定執行。年、月、日代碼之間不用分隔符。某人出生日期為 1995年08月12日,其出生日期碼為 19950812。
三位順序碼:表示在同一地址碼所標識的區域范圍內,對同年、同月、同日出生的人編定的順序號,順序碼的奇數分配給男性,偶數分配給女性。
一位校驗碼:校驗碼按照 ISO 7064:1983.MOD 11-2校驗碼計算出來的檢驗碼。
校驗碼計算方法
1、將前面的身份證號碼17位數分別乘以不同的系數。從第一位到第十七位的系數分別為: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 ;
2、將這17位數字和系數相乘的結果相加;
3、用加出來和除以11,看余數是多少;
4、余數只可能有0 1 2 3 4 5 6 7 8 9 10這11個數字。其分別對應的最後一位身份證的號碼為 1 0 X 9 8 7 6 5 4 3 2 ;
5、通過上面得知如果余數是2,就會在身份證的第18位數字上出現羅馬數字的X。
解決思路
15位轉18位:即身份證號碼的前六位數字+ '19' + 身份證第六位以後的數字 + 校驗碼
(不要問我為什麼加19這種白痴(´⊙ω⊙`) @?¥&?的問題,當然是因為只有19世紀的人才可能擁有15位的身份證號啦)
校驗碼計算方法就更簡單了,將這17位數字和系數相乘的結果相加除以11匹配余數對應的號碼即可。
注意:代碼中我用了幾個變數,在這里拆解講解下。
Ai: 表示第i位置上的身份證號碼數字值 Wi: 表示第i位置上的加權因子 Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
十七位數字本體碼加權求和公式: S = Sum(AiWi), i = 0, … , 16 ,先對前17位數字的權求和
計算模 Y = mod(S, 11)
通過模得到對應的校驗碼
Y: 0 1 2 3 4 5 6 7 8 9 10
校驗碼: 1 0 X 9 8 7 6 5 4 3 2
OK,分析的差不多了,直接看代碼。
怎麼用代碼實現?
# encoding: utf-8
"""
CREATED ON 19-11-05
@AUTHOR: XUSL
"""
WI = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1, ]
VI = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2, ]
DEF GET_VERITY(EIGHTEEN_CARD):
"""
:PARAM EIGHTEEN_CARD:
:RETURN:
"""
AI = []
REMAINING = ''
IF LEN(EIGHTEEN_CARD) == 18:
EIGHTEEN_CARD = EIGHTEEN_CARD[0:-1]
IF LEN(EIGHTEEN_CARD) == 17:
S = 0
FOR I IN EIGHTEEN_CARD:
AI.APPEND(INT(I))
FOR I IN RANGE(17):
S = S + WI[I] * AI[I]
REMAINING = S % 11
RETURN 'X' IF REMAINING == 2 ELSE STR(VI[REMAINING])
DEF UP_TO_EIGHTEEN(FIFTEEN_CARD):
"""
15位轉18位
:PARAM FIFTEEN_CARD:
:RETURN:
"""
EIGHTEEN_CARD = FIFTEEN_CARD[0:6] + '19' + FIFTEEN_CARD[6:15]
RETURN EIGHTEEN_CARD + GET_VERITY(EIGHTEEN_CARD)
DEF DOWN_TO_FIFTEEN(EIGHTEEN_CARD):
"""
18位轉15位
:PARAM EIGHTEEN_CARD:
:RETURN:
"""
RETURN EIGHTEEN_CARD[0:6] + EIGHTEEN_CARD[8:17]
IF __NAME__ == '__MAIN__':
# 15位轉18位
CARD_1 = UP_TO_EIGHTEEN('632123820927051')
PRINT(CARD_1)
# 18位轉15位
CARD_2 = DOWN_TO_FIFTEEN('410125199908222000')
PRINT(CARD_2)
當然,這只是個小功能,主要還是想分享下代碼,如果有同樣的處理可以直接​用。
總結
以上所述是小編給大家介紹的使用Python完成15位18位身份證的互轉功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

2. 如何利用Python做簡單的驗證碼識別

1摘要

驗證碼是目前互聯網上非常常見也是非常重要的一個事物,充當著很多系統的防火牆功能,但是隨時OCR技術的發展,驗證碼暴露出來的安全問題也越來越嚴峻。本文介紹了一套字元驗證碼識別的完整流程,對於驗證碼安全和OCR識別技術都有一定的借鑒意義。

然後經過了一年的時間,筆者又研究和get到了一種更強大的基於CNN卷積神經網路的直接端到端的驗證識別技術(文章不是我的,然後我把源碼整理了下,介紹和源碼在這裡面):

基於python語言的tensorflow的『端到端』的字元型驗證碼識別源碼整理(github源碼分享)

2關鍵詞

關鍵詞:安全,字元圖片,驗證碼識別,OCR,Python,SVM,PIL

3免責聲明

本文研究所用素材來自於某舊Web框架的網站完全對外公開的公共圖片資源。

本文只做了該網站對外公開的公共圖片資源進行了爬取,並未越權做任何多餘操作。

本文在書寫相關報告的時候已經隱去漏洞網站的身份信息。

本文作者已經通知網站相關人員此系統漏洞,並積極向新系統轉移。

本報告的主要目的也僅是用於OCR交流學習和引起大家對驗證安全的警覺。

4引言

關於驗證碼的非技術部分的介紹,可以參考以前寫的一篇科普類的文章:

互聯網安全防火牆(1)--網路驗證碼的科普

裡面對驗證碼的種類,使用場景,作用,主要的識別技術等等進行了講解,然而並沒有涉及到任何技術內容。本章內容則作為它的技術補充來給出相應的識別的解決方案,讓讀者對驗證碼的功能及安全性問題有更深刻的認識。

5基本工具

要達到本文的目的,只需要簡單的編程知識即可,因為現在的機器學習領域的蓬勃發展,已經有很多封裝好的開源解決方案來進行機器學習。普通程序員已經不需要了解復雜的數學原理,即可以實現對這些工具的應用了。

主要開發環境:

3. 用Python校驗身份證號碼真偽

#這個演算法都給了,應該比較簡單吧。我也很菜,隨意寫了一個。異常沒做,你可以自##己加一下。做一些驗證過濾。不知道隨機是不是真是隨意隨機,我沒有按照身份證規##則做隨機。是真的隨機了18位。。。如果你有規則,也可以自己寫一個。
importrandom

yushu=[xforxinrange(0,11)]
ma=['1','0','X','9','8','7','6','5','4','3','2','1']

defyanzheng(nid):

dicma=dict(zip(yushu,ma))

sum=0

forx,yinenumerate(nid[:-1]):

sum+=((2**(18-x-1))%11)*int(y)#17位對應系數相乘的和

ifnid[-1]==dicma[sum%11]:#校驗碼對照
return'%sTrue'%nid
else:
return'%sFalse'%nid
defreadfile(fname):
f=open(fname,'rb')
forlineinf.readlines():
printyanzheng(line.strip())
f.close()
defrandnum():
idstr=''
foriinrange(17):#前17位隨機
idstr+=str(random.randint(0,9))

idstr+=random.choice(ma)#最後一位從列表種隨意一個,因為有X
returnidstr


if__name__=="__main__":
nid=raw_input('PleaseenteryourID:')#用戶輸入ID,沒做任何驗證
printyanzheng(nid)#驗證身份證
readfile('id.txt')#從文件讀出來再驗證
printyanzheng(randnum())#隨機一個在驗證

4. python驗證一個字元串是否是中國身份證密碼

有身份證的API介面,免費的,你可以試試(裡面的apikey 你要自己去獲取,另外python代碼也有示例的)。

附上代碼和執行效果:

5. 身份證校驗碼計算公式是什麼

校驗碼是根據前面十七位數字碼。

具體的公式舉例說明為:

某男性公民身份號碼本體碼為34052419800101001,首先按照公式計算:∑(ai×Wi)(mod11),其中,i表示號碼字元從右至左包括校驗碼在內的位置序號;




這4個的前2個代表著我們身份證的派出所的代碼,那麼接著的是1個數字是根據性別來定的,奇數代表的是男性的身份證,偶數代表的是女性的身份證,最後一個數字就是我們今天的重點,有的是數字,有的人是「X」。

(5)python身份證實名認證代碼擴展閱讀:

對於我們的身份證,其實還有個講究的,就是我們身份證倒數的後兩位數字,其實用來區分男女性別的,倘若你細心可以發現這個數字是奇數的,那個身份證的人就是男性,反之便是女的。

此外,我們生日數字後面那4位,最後兩個已經解釋了是怎麼一回事了,另外的那兩個數字便是我們所出生那時的順序,是以出生的地方為標準的呢,所以其實我們的身份證可是很有講究的。

6. 如何用Python設計一個通過身份證號判斷省份的程序

area={"11":"北京","12":"天津","13":"河北","14":"山西","15":"內蒙古","21":"遼寧","22":"吉林","23":"黑龍江","31":"上海","32":"江蘇","33":"浙江","34":"安徽","35":"福建","36":"江西","37":"山東","41":"河南","42":"湖北","43":"湖南","44":"廣東","45":"廣西","46":"海南","50":"重慶","51":"四川","52":"貴州","53":"雲南","54":"西藏","61":"陝西","62":"甘肅","63":"青海","64":"寧夏","65":"新疆","71":"台灣","81":"香港","82":"澳門","91":"國外"}

s=input('輸入身份證號碼:')

t=s[0]+s[1]

print(area[t])

閱讀全文

與python身份證實名認證代碼相關的資料

熱點內容
java保留小數點兩位 瀏覽:867
喜馬拉雅app怎麼選 瀏覽:35
java編程語言製作app 瀏覽:646
為什麼無法讓app使用數據 瀏覽:184
手機怎麼卸載刷機包預裝app 瀏覽:684
程序員的下班點 瀏覽:420
有關編程的專業 瀏覽:864
linuxsocket編程模型 瀏覽:866
醫美整形分享是什麼app 瀏覽:913
32單片機通道圖 瀏覽:98
tp框架博客源碼 瀏覽:104
現貨分時指標公式源碼 瀏覽:475
天翼雲伺服器是最大的嗎 瀏覽:560
國家電網app怎麼看電量 瀏覽:443
現有安卓手機怎麼更換鴻蒙系統 瀏覽:733
程序員姐夫 瀏覽:297
怎麼現在好多app都要實名了 瀏覽:886
朱有鵬單片機 瀏覽:809
極致籌碼指標源碼 瀏覽:295
單片機讓小燈泡一秒鍾亮一秒鍾滅 瀏覽:367