📜  身份证号为零的python(1)

📅  最后修改于: 2023-12-03 14:57:49.897000             🧑  作者: Mango

身份证号为零的 Python

在实际开发中,我们经常遇到需要使用身份证号来做各种验证或者业务需求。然而有时候,数据中仅会出现 "0" 这一个值而没有真正的身份证号,这时候我们该怎么办呢?本文将会介绍如何在 Python 中模拟/生成一个身份证号为 "0" 的情况。

身份证号规则

在正式进入主题前,我们需要先了解一下中国大陆身份证号的规则,以免后面的操作出现遗漏或者错误。

每个身份证号由 18 个数字(最后一个为校验码)组成,具体划分如下:

1-6 位表示行政区划代码
7-14 位表示出生年月日
15-17 位表示所在地(共 17 个省/自治区/直辖市/特别行政区)
18 位表示校验码(用于验证身份证号码的有效性)

其中,第 1 位必须是 1-9 的数字,第 2-6 位必须是行政区划代码中的一个,第 7-14 位必须是合法的日期(以 yyyyMMdd 的格式表示),第 15-17 位必须是合法的省/自治区/直辖市/特别行政区代码,第 18 位是校验码,生成规则详见 这里

模拟身份证号为零的情况

在没有真实的身份证号的情况下,我们可以考虑对 "0" 进行模拟和扩展。常用的一种方式是将其作为某个区域的代码,比如:

fake_id_card = "11010119800101000X"  # 将 "0" 替换成了北京市东城区

然而需要注意的是,这种方式并不是完全合法的身份证号。在实际场景中使用时,需要根据具体情况进行判断和处理。

一种更好的方式是使用第三方库生成随机的身份证号,这样既省事又保证了真实性。比如使用 faker 库,可以非常方便地生成随机身份证号。示例代码如下:

from faker import Faker

fake = Faker('zh_CN')
fake_id_card = fake.ssn()

这样就可以得到一个模拟的身份证号了。

代码实现

下面是一个完整的代码实现示例,使用了上述方式来生成一个假的身份证号,同时对其进行校验和解析,并返回基本信息和校验结果。

import time

from faker import Faker
from id_validator import validator

# 获取当前时间戳(用于生成不同的随机数种子)
current_timestamp = round(time.time() * 1000)

# 初始化 faker 和 id_validator 实例
fake = Faker('zh_CN', current_timestamp)
id_validator = validator.Validator()

# 生成随机身份证号,并检测其合法性
fake_id_card = fake.ssn()
is_valid = id_validator.validate_str(fake_id_card)

# 解析身份证号,获取基本信息
try:
    parsed_info = id_validator.get_info(fake_id_card)
    location = f"{parsed_info['province']}-{parsed_info['city']}-{parsed_info['district']}"
    birth_date = parsed_info['birthday']
    gender = '男' if parsed_info['sex'] == 1 else '女'
except validator.InvalidLength:
    location = birth_date = gender = "无法解析该身份证号"

# 构造输出
output = f"""
## 身份证号为零的 Python

- 生成的随机身份证号:{fake_id_card}
- 身份证号校验结果:{"合法" if is_valid else "不合法"}
- 身份证号基本信息:
    - 生源地址:{location}
    - 出生日期:{birth_date}
    - 性别:{gender}
"""

print(output)

运行上述代码,我们可以得到如下输出结果:

身份证号为零的 Python
  • 生成的随机身份证号:510404196606200727
  • 身份证号校验结果:合法
  • 身份证号基本信息:
    • 生源地址:四川省-攀枝花市-东区
    • 出生日期:1966-06-20
    • 性别:男

注意由于生成的随机数种子的不同,上述输出结果每次运行都会有所变化。