banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

Pythonコードを使用して中国の身分証番号を生成する方法

Python コードを使用して中国の身分証番号を生成する方法。Python でウェブスクレイピングを行う際には、中国の身分証番号を入力する必要があり、さまざまな検証ルールも存在します。そこで、信頼性のある方法をインターネットで見つけました。

import random, datetime
 
def ident_generator():
    # 身分証番号の最初の2桁は、省のコードです
    sheng = ('11', '12', '13', '14', '15', '21', '22', '23', '31', '32', '33', '34', '35', '36', '37', '41', '42', '43', '44', '45', '46', '50', '51', '52', '53', '54', '61', '62', '63', '64', '65', '66')
 
    # 7000日から25000日前の日付をランダムに選択して、生年月日とします(特別な要件がないため、適当に設定しています。特別な要件がある場合は、ここを改善することができます)
    birthdate = (datetime.date.today() - datetime.timedelta(days=random.randint(7000, 25000)))
 
    # 身分証番号の最初の17桁を結合します(3番目から6番目は市と区のコードで、中国は広大なため、ここでは固定値を使用していますが、要件がある場合はランダムにすることができます。15番目から17番目は生まれた順序コードで、100から199の範囲からランダムに選択します)
    ident = sheng[random.randint(0, 31)] + '0101' + birthdate.strftime("%Y%m%d") + str(random.randint(100, 199))
 
    # 17桁の各桁に乗算する係数を辞書で表現します。たとえば、最初の桁には7を乗算する必要があり、最後の桁には2を乗算する必要があります
    coe = {1: 7, 2: 9, 3: 10, 4: 5, 5: 8, 6: 4, 7: 2, 8: 1, 9: 6, 10: 3, 11:7, 12: 9, 13: 10, 14: 5, 15: 8, 16: 4, 17: 2}
    summation = 0
 
    # forループを使用して、17桁の各桁に乗算した後の合計を計算します
    for i in range(17):
        summation = summation + int(ident[i:i + 1]) * coe[i+1]  # ident[i:i+1] は、各桁の数字を取得するためにPythonのスライスを使用しています
 
    # 17桁の各桁に乗算した後の合計を11で割った余りに対応する表を作成し、余りが0の場合は18番目の桁が1になります
    key = {0: '1', 1: '0', 2: 'X', 3: '9', 4: '8', 5: '7', 6: '6', 7: '5', 8: '4', 9: '3', 10: '2'}
 
    # 完全な18桁の身分証番号を結合します
    return ident + key[summation % 11]

ident_generator()

[参考リンク](http://www.51testing.com/html/12/15124112-3705453.html)
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。