Ⅰ 用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())#隨機一個在驗證
Ⅱ python用身份證號判斷性別
身份證號最後一位代表的就是性別,如果你要想判斷的話看一下,最後一位一般除了X之外都是身份證,最後一位可以代表性別。
Ⅲ 身份證號碼尾號的校驗碼是由什麼公式計算出來的
校驗碼是根據前面十七位數字碼,按照ISO
7064:1983.MOD
11-2校驗碼計算出來的檢驗碼。
具體的公式舉例說明為:
某男性公民身份號碼本體碼為34052419800101001,首先按照公式計算:∑(ai×Wi)(mod
11),其中,i表示號碼字元從右至左包括校驗碼在內的位置序號;
a[i]表示第i位置上的號碼字元值;
W[i]示第i位置上的加權因子,其數值依據公式
W[i]
=
2^(i-1)
mod
(11)計算得出。
則,設R=∑(a[i]×W[i])(mod
11)
=
2,同時R的值【0
1
2
3
4
5
6
7
8
9
10】對應取值為【1
0
X
9
8
7
6
5
4
3
2】。
計算結果為2的校驗碼為X,所以該人員的公民身份號碼應該為
34052419800101001X。
(3)python123身份證校驗擴展閱讀:
身份證號碼的結構和形式:
1、號碼的結構:公民身份號碼是特徵組合碼,由十七位數字本體碼和一位校驗碼組成。排列順序從左至右依次為:六位數字地址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。
2、地址碼:表示編碼對象常住戶口所在縣(縣級市、旗、區)的行政區劃代碼,按GB/T2260的規定執行。
3、出生日期碼:表示編碼對象出生的年、月、日,按GB/T7408的規定執行,年、月、日代碼之間不用分隔符。
4、順序碼:表示在同一地址碼所標識的區域范圍內,對同年、同月、同日出生的人編定的順序號,順序碼的奇數分配給男性,偶數分配給女性。
5、校驗碼:根據前面十七位數字碼,按照ISO
7064:1983.MOD
11-2校驗碼計算出來的檢驗碼。
參考資料來源:網路-身份證號碼
參考資料來源:網路-身份證校驗位
Ⅳ python 作業:「校驗身份證號碼真偽」報告總結
給你2個思路:
自己寫身份證校驗的正則表達式,然後校驗
網上有很多在線的WEB頁面提供身份證真偽校驗,可以通過python調用他們的http介面進行身份證真偽校驗
身份證正則表達式規則或在線校驗頁面,請自行網路。
Ⅳ 如何用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驗證一個字元串是否是中國身份證密碼
有身份證的API介面,免費的,你可以試試(裡面的apikey 你要自己去獲取,另外python代碼也有示例的)。
附上代碼和執行效果:
Ⅶ Python輸入身份證號判斷長度
輸入一個身份證號,判斷其是否有效: 若不為18位,提示「長度錯誤」
Ⅷ 什麼是「2121」校驗方法
2121校驗應該就是利用Luhn演算法
Luhn 演算法或是Luhn
公式,也被稱作「模10演算法」。它是一種簡單的校驗公式,一般會被用於身份證號碼,IMEI號碼,美國供應商識別號碼,或是加拿大的社會保險號碼的驗證。該演算法是由IBM的科學家Hans
Peter Luhn所創造,於1954年1月6日提出該專利的申請,並於1960年8月23日被授予,在美國的專利號為2950048。
該演算法一直都被大家所公用,並且時至今日應用也很廣泛。它被指定在ISO/IEC7812-1。它的目的不是成為一種加密安全的哈希函數;它的目的是防止意外出現的錯誤,而不是惡意攻擊。很多信用卡和眾多的政府身份識別號碼都使用該演算法從一系列的隨機數字中提取有效的數字。
優點和缺點
Luhn
演算法會檢測到任何單碼的錯誤以及幾乎所有的相鄰數字換位的錯誤。但是它不會檢測兩個數字序列09轉90的錯誤(反之亦然)。它會檢測到十分之七的相同雙位數錯誤(不會檢測到22和55的互換,33和66的互換,44和77的互換)。其他更復雜的檢查數字演算法,如費爾赫夫演算法,可以檢測出更多的轉錄錯誤。模N的Luhn演算法是Luhn演算法的一個擴展,支持非數字字元串。因為該演算法採取了從右向左的方式,而且零位會影響計算的結果。只有當零位造成了數位的移動或是用零來填充一串數字的開頭時才不會影響計算結果的生成。因此不論在將1234用零填充為0001234之前或是之後,使用Luhn演算法得到的結果都是一樣的。
該演算法在美國專利上是為了給手持或是機械設備計算校驗碼。所以它必須盡可能的簡單。
非正式的解釋
該公式會通過校驗碼對一串數字進行驗證。校驗碼通常會被加到賬戶號碼中,從而拼合成一個完整的賬戶號碼。拼合後的賬戶號碼要通過以下的測試:
1.從校驗位開始計數(校驗位一般添加在賬戶的最後面),按從右向左的順序,將偶數都乘以2.
2.將得到的結果相加起來(例如:10=1+0=1,14=1+4=5,也有的說法是若是乘2的結果是兩位數的話,那麼就直接減去9,和之前位數拆開相加的結果是一樣的),然後再與原數字串的奇數位相加。
3.如果加起來的和模10後為0(也就是相加的結果是以0結尾的,10的倍數),那麼這個數字串根據Luhn演算法來說就是有效的,反之就是無效的。
假設一個字元串為「7992739871」,我們為其加上一個校驗位,最後組成的數字為7992739871x:
賬戶號碼: 7 9 9
2 7 3
9 8 7 1 x
將偶數位乘以2:7 18 9 4 7 6 9
16 7 2
x
相加後的數字: 7 9 9 4 7 6 9 7 7
2 =67
校驗碼x是通過將相加後的數字乘以9後,在進行模10計算(那麼就是:(67*9)mod10,也有的說法是取比相加的和最小的10的整數倍數字,其實結果都是一樣的)。通俗地說:
1.計算所有位數的和(67)。
2.將其乘以9(603)。
3.取最後一位數字(3)。
4.得到的結果就是校驗位。
另外一種得到校驗位的方法:先計算所有位數的和,用10減去所有位數和模10的結果。(67的個位是7;10-7=3即為校驗位)。通俗地說:
1.計算所有位數的和(67)。
2.取個位數(7)。
3.用10減去個位數(3)。
4.得到的結果就是校驗位。
這樣,我們得到的完整的賬戶號碼是:7992739871x。
下面的每一個數字 79927398710, 79927398711, 79927398712, 79927398713, 79927398714,
79927398715, 79927398716, 79927398717, 79927398718,
79927398719都給以用如下的方法進行驗證。
1.從最右邊開始計算,將偶數位都乘以2:(1*2)=2,(8*2)=16,(3*2)=6,(2*2)=4,(9*2)=18
2.將每一位數字加起來:x(校驗位)+(2)+7+(1+6)+9+(6)+7+(4)+9+(1+8)+7=X+67.
3.如果得到的結果是10的倍數,那麼這個賬戶號碼就可能是有效的。需要注意的是3就是唯一的可以使得和(67+x)是10的整數倍的個位數。
4.因此,以上的所有賬戶除了79927398713 是有效的以外,其他均為無效的賬戶。
校驗位的驗證的代碼實現
以下通過Python來實現的:
def luhn_checksum(card_number):
def digits_of(n):
return [int(d) for d in str(n)]
digits = digits_of(card_number)
odd_digits = digits[-1::-2]
even_digits = digits[-2::-2]
checksum = 0
checksum += sum(odd_digits)
for d in even_digits:
checksum += sum(digits_of(d*2))
return checksum % 10
def is_luhn_valid(card_number):
return luhn_checksum(card_number) == 0
校驗位的計算
上面的演算法檢查輸入校驗位的有效性。計算校驗位需要一個小的適應演算法,即:
1.切換奇/偶乘法。
2.如果得到的和(sum)模10等於0的話,那麼校驗碼就是0。
3.否則,校驗碼就等於10減去得到的和模10(10 - (sum mod 10))
def calculate_luhn(partial_card_number):
return 10 - luhn_checksum(int(partial_card_number) * 10)
Ⅸ 一個Python學習群的加群驗證問題'123'='321'192|195:1010&89
這句話語法有錯吧,少了個=號?
而且python沒有這種三元表達式
當然,也可能是其他語言,但計算機編程語言裡面,大部分由三元表達式的,=號是賦值。。。但賦值的話,一般是指向內存地址,或者復制內存地址中的內容到變數內存地址中。。但『123』=『321』,都是常量,不可能有賦值操作,所以應該是等於號。。。
如果是等於號,那麼就執行後面那句,意思是1010邏輯與89,結果當然是80
Ⅹ python 中怎麼解析身份證
身份證 分地址碼 和 生日碼 隨機碼 和 驗證碼
其他的你去網路