使用 Python 生成正确的身份证号码
2019-11-20 本文已影响0人
somenzz
接上文,知道了老赖的出生地,出生日期,性别,可以将他的身份证号范围缩小至 500 个以内。如果使用 Python 生成这 500 个正确的身份证号呢?
话不多说,这里直接给出代码:
# -*- coding: utf-8 -*-
class IdNumber(str):
def __init__(self, id_number):
super(IdNumber, self).__init__()
self.id = id_number
def get_check_digit(self):
"""通过身份证号获取校验码"""
check_sum = 0
for i in range(0, 17):
check_sum += ((1 << (17 - i)) % 11) * int(self.id[i])
check_digit = (12 - (check_sum % 11)) % 11
return check_digit if check_digit < 10 else "X"
@classmethod
def generate_myid(cls):
generate_ids = []
# 随机生成一个区域码(6位数)
area_code = "412826"
# 限定出生日期范围(8位数)
birth_day = "19610420"
# 顺序码(2位数)
for i in range(100):
sort_no = f"{i:02d}"
for j in [x for x in range(10) if x % 2 != 0]:
sex = j
prefix = f"{area_code}{birth_day}{sort_no}{sex}"
valid_bit = str(cls(prefix).get_check_digit())
generate_ids.append(f"{prefix}{valid_bit}")
return generate_ids
if __name__ == "__main__":
generate_ids = IdNumber.generate_myid()
print(len(generate_ids))
for id in generate_ids:
print(id)
以上代码源自 github 仓库:
https://github.com/jayknoxqu/id-number-util
可以随机生成正确的身份证号供测试使用。
当然,还有可以直接验证身份证合法性的工具,github 仓库:
https://github.com/jxlwqq/id-validator.py
这两个仓库,身份证相关的问题基本可以解决了。