banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

Python 代碼方式生產中國身份證號碼

Python 代碼方式生產中國身份證號碼 python 做爬蟲需要填寫中國身份證號碼,而且又各種驗證規則,所以網上找了個靠譜的

import random, datetime

def ident_generator():
#身份證號的前兩位,省份代號
sheng = ('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', '66')

#隨機選擇距離今天在7000到25000的日期作為出生日期(沒有特殊要求我就隨便設置的,有特殊要求的此處可以完善下)
birthdate = (datetime.date.today() - datetime.timedelta(days = random.randint(7000, 25000)))

#拼接出身份證號的前17位(第3-第6位為市和區的代碼,中國太大此處就偷懶了寫了定值,有要求的可以做個隨機來完善下;第15-第17位為出生的順序碼,隨機在100到199中選擇)
ident = sheng\[random.randint(0, 31)\] + '0101' + birthdate.strftime("%Y%m%d") + str(random.randint(100, 199))

#前17位每位需要乘上的係數,用字典表示,比如第一位需要乘上7,最後一位需要乘上2
coe = {1: 7, 2: 9, 3: 10, 4: 5, 5: 8, 6: 4, 7: 2, 8: 1, 9: 6, 10: 3, 11:7, 12: 9, 13: 10, 14: 5, 15: 8, 16: 4, 17: 2}
summation = 0

#for循環計算前17位每位乘上係數之後的和
for i in range(17):
    summation = summation + int(ident\[i:i + 1\]) \* coe\[i+1\]#ident\[i:i+1\]使用的是python的切片獲得每位數字

#前17位每位乘上係數之後的和除以11得到的餘數對照表,比如餘數是0,那第18位就是1
key = {0: '1', 1: '0', 2: 'X', 3: '9', 4: '8', 5: '7', 6: '6', 7: '5', 8: '4', 9: '3', 10: '2'}

#拼接得到完整的18位身份證號
return ident + key\[summation % 11\]

ident_generator()

http://www.51testing.com/html/12/15124112-3705453.html

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。