1. chinese-id-generator
库
如果需要专门生成符合规则的中国身份证号,可以使用 [
chinese-id-generator] 库。
安装
pip install chinese-id-generator
示例代码
from faker import Faker
from chinese_id_generator import Generator
# 初始化 Faker 对象
fake = Faker("zh_CN")
# 初始化身份证生成器
id_generator = Generator()
# 生成随机姓名
name = fake.name()
# 生成随机手机号
phone_number = fake.phone_number()
# 生成随机地址
address = fake.address().strip()
# 生成随机身份证号
id_number = id_generator.generate()
# 输出结果
print(f"姓名: {name}")
print(f"手机号: {phone_number}")
print(f"地址: {address}")
print(f"身份证号: {id_number}")
2. faker
库
是一个功能强大的库,用于生成各种类型的伪造数据,包括姓名、地址、电话号码等。它支持多种语言和地区。
安装
pip install faker
- fake.name():生成随机中文姓名。
- fake.phone_number():生成随机中国大陆手机号。
- fake.address():生成随机详细地址。
- 身份证号需要自己实现校验码逻辑。
示例代码:
from faker import Faker
# 初始化 Faker 对象,指定区域为中国
fake = Faker("zh_CN")
# 生成随机姓名
name = fake.name()
# 生成随机手机号
phone_number = fake.phone_number()
# 生成随机地址
address = fake.address()
# 生成随机身份证号(需要自定义扩展)
def generate_random_id_number():
from datetime import datetime, timedelta
import random
# 地区码(示例数据)
area_codes = ["110105", "310101", "440106", "510104", "330102"]
area_code = random.choice(area_codes)
# 随机出生日期(1950-2020年间的日期)
birth_date = (datetime(1950, 1, 1) + timedelta(days=random.randint(0, 25567))).strftime("%Y%m%d")
# 随机序列号
sequence = f"{random.randint(1, 999):03d}"
# 校验码计算
weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
check_codes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
id_17 = area_code + birth_date + sequence
sum_weight = sum(int(id_17[i]) * weights[i] for i in range(17))
check_code = check_codes[sum_weight % 11]
return id_17 + check_code
id_number = generate_random_id_number()
# 输出结果
print(f"姓名: {name}")
print(f"手机号: {phone_number}")
print(f"地址: {address.strip()}")
print(f"身份证号: {id_number}")
3. mimesis
库
是另一个功能丰富的库,支持生成各种伪造数据,并且性能较高。
安装
pip install mimesis
- Person(Locale.ZH):生成随机中文姓名和手机号。
- Address(Locale.ZH):生成随机地址。
- 身份证号需要自己实现校验码逻辑。
示例代码
from mimesis import Person, Address
from mimesis.locales import Locale
import random
# 初始化 Person 和 Address 对象,指定区域为中国
person = Person(Locale.ZH)
address = Address(Locale.ZH)
# 生成随机姓名
name = person.full_name()
# 生成随机手机号
phone_number = person.telephone()
# 生成随机地址
address_detail = address.address()
# 生成随机身份证号(需要自定义扩展)
def generate_random_id_number():
# 地区码(示例数据)
area_codes = ["110105", "310101", "440106", "510104", "330102"]
area_code = random.choice(area_codes)
# 随机出生日期(1950-2020年间的日期)
birth_date = f"{random.randint(1950, 2020)}{random.randint(1, 12):02d}{random.randint(1, 28):02d}"
# 随机序列号
sequence = f"{random.randint(1, 999):03d}"
# 校验码计算
weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
check_codes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
id_17 = area_code + birth_date + sequence
sum_weight = sum(int(id_17[i]) * weights[i] for i in range(17))
check_code = check_codes[sum_weight % 11]
return id_17 + check_code
id_number = generate_random_id_number()
# 输出结果
print(f"姓名: {name}")
print(f"手机号: {phone_number}")
print(f"地址: {address_detail}")
print(f"身份证号: {id_number}")
注: 在faker和mimesis库中生成身份证号码部分都可以使用chinese-id-generator生成
from chinese_id_generator import Generator
id_number = id_generator.generate()
print(f"身份证号: {id_number}")