712
Python
Python隨機生成身份證號碼!
今天一個朋友和我聊天說到,昨天去百度麵試高級測試工程師。
麵試過程中,有被問到Python相關知識。
也提了一個Python相關的問題。
用Python實現隨機生成大於18以上的身份證號碼。
很遺憾他沒有做出來。但是至少也是一次不錯的麵試經驗。
上午我就自己動手試了試。
首先百度了下身份證生成規則。下麵大家來一起看一下:
公民身份號碼是由17位數字碼和1位校驗碼組成。排列順序從左至右分別為:6位地址碼,8位出生日期碼,3位順序碼和1位校驗碼。
地址碼(身份證地址碼對照表見下麵附錄)和出生日期碼很好理解,順序碼表示在同一地址碼所標識的區域範圍內,對同年同月同日出生的人編定的順序號,順序碼的奇數分配給男性,偶數分配給女性。
身份證最後一位校驗碼算法如下:
將身份證號碼前17位數分別乘以不同的係數,從第1位到第17位的係數分別為:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
將得到的17個乘積相加。
將相加後的和除以11並得到餘數。
餘數可能為0 1 2 3 4 5 6 7 8 9 10這些個數字,其對應的身份證最後一位校驗碼為1 0 X 9 8 7 6 5 4 3 2。
身份證號碼解密|身份證尾數校驗碼算法|ID card information
身份證地址碼對照表。
以下代碼都是在Python3環境下運行,用Python2的請自行修改再運行。
運行環境:Python3,運行使用的到庫:requests,bs4,random,time
這個網站有點過分了,沒登錄不讓複製,我就直接暴力點,把它爬下來了。
import requests
不過大家不要太認真。(我還是比較菜的)
下麵是身份證生成代碼。
問題:
1:前6位為隨便複製了一點地區代碼加到列表裏麵去隨機取。
2:年份直接從1948年開始(百度介紹說身份證是從1948年開始實施的,雖然當時好像是15位吧),結束年份為當前本地時間減去18,這樣就避免生成的身份證號碼上年齡小於18周歲
3:日期我沒有去考慮每月的日期長度(例如2月份沒有30,31號),我直接以1-31
4:後麵四位我沒有按照規則去生成。
PS:有興趣的可以完善下,讓生成的更加符合規律。
import randomimport timedef regiun():
最後更新:2017-10-08 20:31:00