Python七号

使用 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

这两个仓库,身份证相关的问题基本可以解决了。

上一篇下一篇

猜你喜欢

热点阅读