产生身份证字号 ( 随机 )
这篇文章会介绍使用 Python 的字典、串列、for 循环、random 和 if 判断式,做出一个身份证字号产生器。
本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
身份证字号编码规则
台湾身份证编码的规则如下:
第 1 码:行政区码,不同行政区由不同的英文字母表示,每个英文字母对应一个二位数的数字,下图为英文数字的对照表,主要可以参考“等价数值”数字 ( 参考“维基百科 中华民国国民身份证” )。
第 2 码:性别代码,1 表示男生,2 表示女生。
第 3 码~第 10 码:八个 0~9 数字组成的流水号。
检查规则:参考下图的编码计算规则,若最后 N 除以十可以整除,表示身份证号码正确。
产生身份字号
身份证开头的英文字,每个都有其对应的数字,所以使用“字典”的方式建立一个英文字和数字对照表,接着透过 random.choice 搭配 keys() 随机取得 key 的名称 ( 英文字母 ),再根据英文字母得到数字,透过检查规则的数学式计算,最后就能得到身份证字号。
import random
# 列出字母對應的數字
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 i in range(10):
local = random.choice(list(local_table.keys())) # 取得隨機字母
sex = random.randint(1,2) # 性別
total = local_table[local]+sex*8 # 先將前兩個數字換算成的數字加總
result = f'{local}{sex}' # 結果使用 f-string 來組合字串
for i in range(1,8):
num = random.randint(0,9) # 重複八次每次都取出 0~9 隨機數字
total = total + num*(8-i) # 根據公式計算數值並加總到 total
result = f'{result}{num}' # 結果使用 f-string 來組合字串
num10 = 10 - total%10 # 最後一碼根據總值除以十是否整除來決定,如果不能整除,就是 10-餘數
if num10 == 10 : num10 = 0 # 如果能整除,最後一碼就是 0
result = f'{result}{num10} # 結果使用 f-string 來組合字串
print(result) # 印出結果
一次产生二十组身份证字号
如果加入 for 循环,就能够一次产生 20 组随机的身份证字号。
import random
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 i in range(20):
local = random.choice(list(local_table.keys()))
sex = random.randint(1,2)
total = local_table[local]+sex*8
result = f'{local}{sex}'
for i in range(1,8):
num = random.randint(0,9)
total = total + num*(8-i)
result = f'{result}{num}'
num10 = 10 - total%10
if num10 == 10 : num10 = 0
result = f'{result}{num10}'
print(result)
微信扫码关注
抖音扫码关注