檢查身分證字號
這篇文章會介紹使用 Python 的字典、串列、for 迴圈、random 和 if 判斷式,做出一個身分證字號產生器。
本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
基本原理
按照身分證字號編碼規則,輸入身分證字號後,先判斷是否有「十碼」,接著判斷第二碼是否為 1 或 2,最後判斷檢查碼,當三層判斷都是 True 時,表示身分證字號正確。
參考:身分證字號編碼規則
檢查身份字號
檢查身分證字號的流程如下:
- 新增一個 local_table 變數,內容是第一碼英文數字的對照表,再新增一個變數 id_number 記錄使用者輸入的身分證字號。
- 使用 while 迴圈讓使用者可以連續輸入。
- 一開始的時候可以先判斷身分證字號長度與性別碼,兩者如果有錯就跳出錯誤訊息。
- 最後套用第十碼檢查碼的程式,計算並印出對應的結果。
# 建立字母與數字對照表
local_table = {'A':1,'B':0,'C':9,'D':8,'E':7,'F':6,'G':5,'H':4,'I':9,
'J':3,'K':2,'L':2,'M':1,'N':0,'O':8,'P':9,'Q':8,'R':7,
'S':6,'T':5,'U':4,'V':3,'W':1,'X':3,'Y':2,'Z':0}
while True: # 使用 while 迴圈
id_number = input('輸入身分證字號:') # 輸入身分證字號
if len(id_number)!=10: break # 如果輸入的長度不等於 10,就跳出 while 迴圈
sex = int(id_number[1]) # 取得第二碼數字
if sex!=1 and sex!=2: break # 第二碼如果不是 1 也不是 2 就跳出 while 迴圈
check_num = local_table[id_number[0]] # 檢查數值最開始等於英文字母對照的數字
# 依序檢查第二碼到第八碼
for i in range(1, 9):
check_num = check_num + int(id_number[i])*(9-i) # 根據公式計算
check_num = check_num + int(id_number[9]) # 加入最後一碼的數值
if check_num%10 ==0:
print('身分證字號正確') # 如果除以十可以整除表示正確
else:
print('身分證字號格式錯誤')
一次檢查多組身分證字號
如果不想一一輸入身分證字號,可以使用 for 迴圈搭配身分證字號的 list 串列,就能做到快速檢查多組身分證字號的效果。
# 身分證字號串列
checkList = ['T124488950','J295958303','H113928524','C155188249',
'F253394502','G247209842','R127565925','R285863900','H252914217',
'W257131793','C155561444','H233767761','C189291513','O189894604',
'T121401737','M199155915','W263602883','G194179831','R187026681',
'Z204502894']
local_table = {'A':1,'B':0,'C':9,'D':8,'E':7,'F':6,'G':5,'H':4,'I':9,
'J':3,'K':2,'L':2,'M':1,'N':0,'O':8,'P':9,'Q':8,'R':7,
'S':6,'T':5,'U':4,'V':3,'W':1,'X':3,'Y':2,'Z':0}
# 使用 for 迴圈檢查
for id_number in checkList:
if len(id_number)!=10: break # 判斷如果 id_arr 長度不等於 10,就跳出 while 迴圈
sex = int(id_number[1]) # 取得第二碼數字
if sex!=1 and sex!=2: break # 判斷如果不是 '1' 也不是 '2' 就跳出 while 迴圈
check_num = local_table[id_number[0]]
for i in range(1, 9):
check_num = check_num + int(id_number[i])*(9-i)
check_num = check_num + int(id_number[9])
print(check_num)
if check_num%10 ==0:
print(f'{id_number}:身分證字號正確')
else:
print(f'{id_number}:身分證字號格式錯誤!')
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~