真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python中怎么隨機(jī)生成身份證號(hào)碼并實(shí)現(xiàn)校驗(yàn)功能-創(chuàng)新互聯(lián)

這篇文章給大家介紹Python中怎么隨機(jī)生成身份證號(hào)碼并實(shí)現(xiàn)校驗(yàn)功能,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

成都創(chuàng)新互聯(lián)于2013年成立,先為新華等服務(wù)建站,新華等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為新華企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

身份組成方式

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

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

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

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

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

校驗(yàn)碼計(jì)算方法

?1. 將身份證號(hào)碼從右至左標(biāo)記為a_1 , a_2 , \cdots , a_{18},a_1即為校驗(yàn)碼;
?2. 計(jì)算權(quán)重系數(shù) W_i=2^{i-1}\ \bmod \ {11}

所以:

i181716151413121110987654321
Wi79105842163791058421

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

使用Python獲取身份證校驗(yàn)碼:

def get_check_digit(id_number):
  """通過(guò)身份證號(hào)獲取校驗(yàn)碼"""
  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'

隨機(jī)生成身份證

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

@classmethod
def generate_id(cls, sex=0):
  """
  隨機(jī)生成身份證號(hào),sex = 0表示女性,sex = 1表示男性
  """
  # 隨機(jī)生成一個(gè)區(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))
  # 校驗(yàn)碼(1位數(shù))
  return id_number + str(cls(id_number).get_check_digit())

工具類主要功能

if __name__ == '__main__':
  random_sex = random.randint(0, 1) # 隨機(jī)生成男(1)或女(0)
  print IdNumberUtil.generate_id(random_sex) # 隨機(jī)生成身份證號(hào)
  print IdNumberUtil('410326199507103197').area_id # 地址編碼:410326
  print IdNumberUtil('410326199507103197').get_area_name() # 地址:汝陽(yáng)縣
  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() # 校驗(yàn)碼:7
  print IdNumberUtil.verify_id('410326199507103198') # 檢驗(yàn)身份證是否正確:False

關(guān)于Python中怎么隨機(jī)生成身份證號(hào)碼并實(shí)現(xiàn)校驗(yàn)功能就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。


網(wǎng)頁(yè)題目:Python中怎么隨機(jī)生成身份證號(hào)碼并實(shí)現(xiàn)校驗(yàn)功能-創(chuàng)新互聯(lián)
瀏覽路徑:http://weahome.cn/article/hjioc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部