国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python隨機生成身份證號碼及校驗功能

2020-01-04 13:55:52
字體:
來源:轉載
供稿:網友

GitHub : https://github.com/jayknoxqu/id-number-util

身份組成方式

中華人民共和國國家標準GB 11643-1999《公民身份號碼》中規定:公民身份號碼是特征組合碼,由十七位數字本體碼和一位校驗碼組成。

18位數字組合的方式是:

 

1 1 0 1 0 2 Y Y Y Y M M D D 8 8 8 X
區域碼(6位) 出生日期碼(8位) 順序碼(2位) 性別碼(1位) 校驗碼(1位)

 

區域碼(6位) 出生日期碼(8位) 順序碼(2位) 性別碼(1位) 校驗碼(1位)

•區域碼 指的是公民常住戶口所在縣(市、鎮、區)的行政區劃代碼,如110102是北京市-西城區。但港澳臺地區居民的身份號碼只精確到省級。
•出生日期碼 表示公民出生的公歷年(4位)、月(2位)、日(2位)。
•順序碼 表示在同一區域碼所標識的區域范圍內,對同年、同月、同日出生的人編定的順序號。
•性別碼 奇數表示男性,偶數表示女性。
•最后一位是校驗碼,這里采用的是ISO 7064:1983,MOD 11-2校驗碼系統。校驗碼為一位數,但如果最后采用校驗碼系統計算的校驗碼是“10”,礙于身份證號碼為18位的規定,則以“X”代替校驗碼“10”。

校驗碼計算方法

•1. 將身份證號碼從右至左標記為a_1 , a_2 , /cdots , a_{18},a_1即為校驗碼;
•2. 計算權重系數 W_i=2^{i-1}/ /bmod / {11}

所以:

 

i 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
Wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1

 

•3. 計算S = /sum_{i=2}^{18} a_i /cdot W_i 
•4. a_1=(12-( S / /bmod 11)) /bmod 11

使用Python獲取身份證校驗碼:

def get_check_digit(id_number):  """通過身份證號獲取校驗碼"""  check_sum = 0  for i in range(0, 17):    check_sum += ((1 << (17 - i)) % 11) * int(id_number[i])  check_digit = (12 - (check_sum % 11)) % 11  return check_digit if check_digit < 10 else 'X'

隨機生成身份證

由上面的組合方式我們可以得出以下代碼:

@classmethoddef generate_id(cls, sex=0):  """  隨機生成身份證號,sex = 0表示女性,sex = 1表示男性  """  # 隨機生成一個區域碼(6位數)  area_info = random.randint(0, len(addr))  id_number = str(addr[area_info][0])  # 限定出生日期范圍(8位數)  start, end = "1960-01-01", "2000-12-30"  days = (datetime.datetime.strptime(end, "%Y-%m-%d") - datetime.datetime.strptime(start, "%Y-%m-%d")).days + 1  birth_days = datetime.datetime.strftime(    datetime.datetime.strptime(start, "%Y-%m-%d") + datetime.timedelta(random.randint(0, days)), "%Y%m%d"  )  id_number += str(birth_days)  # 順序碼(2位數)  id_number += str(random.randint(10, 99))  # 性別碼(1位數)  id_number += str(random.randrange(sex, 10, step=2))  # 校驗碼(1位數)  return id_number + str(cls(id_number).get_check_digit())

 

工具類主要功能

if __name__ == '__main__':  random_sex = random.randint(0, 1) # 隨機生成男(1)或女(0)  print IdNumberUtil.generate_id(random_sex) # 隨機生成身份證號  print IdNumberUtil('410326199507103197').area_id # 地址編碼:410326  print IdNumberUtil('410326199507103197').get_area_name() # 地址:汝陽縣  print IdNumberUtil('410326199507103197').get_birthday() # 生日:1995-7-10  print IdNumberUtil('410326199507103197').get_age() # 年齡:23(歲)  print IdNumberUtil('410326199507103197').get_sex() # 性別:1(男)  print IdNumberUtil('410326199507103197').get_check_digit() # 校驗碼:7  print IdNumberUtil.verify_id('410326199507103198') # 檢驗身份證是否正確:False

 

[√]: 代碼地址: https://github.com/jayknoxqu/id-number-util

總結

以上所述是小編給大家介紹的Python隨機生成身份證號碼及校驗功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 淮安市| 绵阳市| 衡阳市| 和田县| 永丰县| 康保县| 北宁市| 大足县| 汤阴县| 阳朔县| 梓潼县| 乐东| 吴旗县| 莎车县| 应城市| 德化县| 肇州县| 峨山| 武邑县| 甘肃省| 武冈市| 丹寨县| 宝应县| 广宗县| 遵义县| 台东县| 怀宁县| 达尔| 鲁甸县| 龙江县| 金坛市| 乾安县| 大洼县| 鹿泉市| 鄂伦春自治旗| 文昌市| 陵水| 陵水| 新泰市| 施秉县| 辽宁省|