欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2018年12月04日 15:44:08   作者:風靜花猶落  
這篇文章主要介紹了Python隨機生成身份證號碼及校驗功能,文中給大家提到了校驗碼計算方法,需要的朋友可以參考下

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

身份組成方式

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

18位數(shù)字組合的方式是:

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

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

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

校驗碼計算方法

•1. 將身份證號碼從右至左標記為a_1 , a_2 , \cdots , a_{18},a_1即為校驗碼;
•2. 計算權重系數(shù) 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'

隨機生成身份證

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

@classmethod
def generate_id(cls, sex=0):
  """
  隨機生成身份證號,sex = 0表示女性,sex = 1表示男性
  """
  # 隨機生成一個區(qū)域碼(6位數(shù))
  area_info = random.randint(0, len(addr))
  id_number = str(addr[area_info][0])
  # 限定出生日期范圍(8位數(shù))
  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位數(shù))
  id_number += str(random.randint(10, 99))
  # 性別碼(1位數(shù))
  id_number += str(random.randrange(sex, 10, step=2))
  # 校驗碼(1位數(shù))
  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隨機生成身份證號碼及校驗功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • python中的reduce內建函數(shù)使用方法指南

    python中的reduce內建函數(shù)使用方法指南

    python中的reduce內建函數(shù)是一個二元操作函數(shù),他用來將一個數(shù)據(jù)集合(鏈表,元組等)中的所有數(shù)據(jù)進行下列操作:用傳給reduce中的函數(shù) func()(必須是一個二元操作函數(shù))先對集合中的第1,2個數(shù)據(jù)進行操作,得到的結果再與第三個數(shù)據(jù)用func()函數(shù)運算,最后得到一個結果
    2014-08-08
  • 整理Python中常用的conda命令操作

    整理Python中常用的conda命令操作

    今天給大家?guī)淼氖顷P于Python的相關知識,文章圍繞著Python中常用的conda命令行操作展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Python代碼的打包與發(fā)布詳解

    Python代碼的打包與發(fā)布詳解

    這篇文章主要介紹了Python代碼的打包與發(fā)布的方法,需要的朋友可以參考下
    2014-07-07
  • python文檔字符串(函數(shù)使用說明)使用詳解

    python文檔字符串(函數(shù)使用說明)使用詳解

    這篇文章主要介紹了python文檔字符串(函數(shù)使用說明)使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • pygame實現(xiàn)煙雨蒙蒙下彩虹雨

    pygame實現(xiàn)煙雨蒙蒙下彩虹雨

    這篇文章主要為大家詳細介紹了pygame實現(xiàn)煙雨蒙蒙下彩虹雨,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 18?個?Python?編程技巧,提高工作效率

    18?個?Python?編程技巧,提高工作效率

    這篇文章主要分享的是18個Python編程技巧,文章圍繞?Python的相關資料展開詳細全文,對工作中的你了能具有一定的參考價值,需要的朋友可以參考一下,希望對你有所幫助
    2022-01-01
  • python 矩陣增加一行或一列的實例

    python 矩陣增加一行或一列的實例

    下面小編就為大家分享一篇python 矩陣增加一行或一列的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 詳細解讀Python中的json操作

    詳細解讀Python中的json操作

    json操作是最為基本的、最為常用的,Python自帶的json模塊就可以滿足大部分應用場景,而且使用起來極為簡單,下面這篇文章主要給大家介紹了關于Python中json操作的相關資料,需要的朋友可以參考下
    2022-05-05
  • python操作配置文件實戰(zhàn)記錄

    python操作配置文件實戰(zhàn)記錄

    這篇文章主要給大家介紹了關于python操作配置文件的相關資料,配置文件是為程序配置參數(shù)和初始設置的文件,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • Python數(shù)據(jù)列表中的空補0的問題解決

    Python數(shù)據(jù)列表中的空補0的問題解決

    在Python中,如果你有一個包含空值的數(shù)據(jù)列表,你可以使用列表推導式或循環(huán)將這些空值替換為0,本文就來介紹一下如何解決,感興趣的可以了解一下
    2024-03-03

最新評論