Python案例分析 關於身份證的那些事

2021-10-08 13:12:48 字數 3434 閱讀 4677

識別一串身份證是否是真實的身份證號碼: 公民身份號碼是特徵組合碼,共18位,由十七位數字本體碼和一位數字校驗碼組成。 排列順序從左至右依次為:六位數字位址碼八位數字出生日期碼三位數字順序碼一位數字校驗碼

作為尾號的校驗碼,是由號碼編制單位按統一的公式計算出來的。

身份證第18位(校驗碼)的計算方法:

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位數字上出現羅馬數字的ⅹ。如果餘數是10,身份證的最後一位號碼是2。

實驗身份證號:『110000198003198182』/『440204199406184727』

案例的主要分析思路為三步:

# 1. 判斷位數18

# 2. 擷取前17位和最後一位

# 3. 計算除以11之後的餘數是多少

defcheck_function

(id_num)

:# 個數上判斷是否18位

iflen

(id_num)

==18

:# 獲取前17位和最後一位

num17 = id_num[:17

] num_last = id_num[-1

]# 前17位數字和係數相乘的結果相加

# 係數是固定的

moduls =[7

,9,10

,5,8

,4,2

,1,6

,3,7

,9,10

,5,8

,4,2

]# 前17位字元轉化成int型別

num17 =

map(

int,num17)

# [1,1,0,0,.....]

# 將兩個列表的對應資料進行打包

num_tuple =

zip(num17,moduls)

# [(1, 4), (2, 5), (3, 6)]

# 對應位置乘積

num =

list

(map

(lambda x:x[0]

*x[1

],num_tuple)

)# print(list(num))

# 求和,取餘數

mod =

sum(num)%11

print

(mod)

# 根據結果與最後一位進行判斷

(身份證號碼第十五位到十七位)位址碼所標識的區域範圍內,對同年、月、日出生的人員編定的順序號。 其中第十七位奇數分給男性,偶數分給女性。 前兩位代表的是省,三位和四位代表的市

def

id_infocheck

(id_num)

:# 1. 處理文字(每一行變成字典中鍵值對)

# 不用每一次都寫關閉

with

open

('./area.txt'

,'r'

,encoding=

'utf-8'

)as f:

codelist = f.readlines(

)# print(codelist)

list1 =

[i.split(

)for i in codelist]

# 二維的列表轉化成字典

code_dict =

dict

(list1)

# 2. 獲取地區

six_num = id_num[:6

]# 是哪乙個縣

# print(code_dict[six_num])

two_num = id_num[:2

]+'0000'

print

(code_dict[two_num]

) four_num = id_num[:4

]+'00'

print

(code_dict[four_num]

)

birth= id_num[6:

14]print

(birth)

***_num =

int(id_num[14:

17])if ***_num %2==

0:print

('女'

)else

:print

('男'

)# 生肖

python身份證校驗

驗證規則如下 長度必須為18位 格式為 前17位是數字,最後一位是數字或者x 不區分大小寫 前6位是地區碼,必須存在 第7位到12位是出生日期,必須是存在的日期 最後一位是驗證位,規則必須匹配 輸入為乙個身份證號的字串 輸出為乙個tuple 0 是否是身份證 1 錯誤資訊或者所屬地區 import ...

Python 身份證核對

id card input 請輸入身份證號碼 存放身份證 jy id card len id card 1 len id card 該位是最後一位用於最後的比較 iflen id card 18 當你輸入身份證的時候必須是18位 x 7 9,10 5,8 4,2 1,6 3,7 9,10 5,8 4...

python驗證身份證

def get checkcode id 計算身份證號碼的校驗位 param id number str string 身份證號的前17位,比如 3201241987010100 returns 返回型別 tuple flag bool 如果身份證號格式正確,返回 true 格式錯誤,返回 fals...