閱讀712 返回首頁    go 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

  上一篇:go Python可視化的擴展模塊matplotlib的簡單應用
  下一篇:go 幫你提升 Python的27 種編程語言