返回
用Python化繁为简,玩转随机身份证生成。
开发工具
2024-01-11 08:21:31
身份证号码的组成
中华人民共和国国家标准GB 11643-1999《公民身份号码》中规定:公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。
- 区域码:指的是公民常住户口所在县(市、镇、区)的行政区划代码,如110102是北京市-西城区。但港澳台地区居民的身份号码只精确到省级。
- 出生日码:指的是公民出生的年月日,如19900101是1990年1月1日。
- 顺序码:指的是公民在同一地址按出生日期先后顺序排列的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
- 校验码:校验码是根据前面十七位数字本体码计算出来的,它使身份证号码具有唯一性和不易伪造性。
身份证号码的校验
身份证号码的校验码是根据前面十七位数字本体码计算出来的,校验码的计算方法如下:
- 将身份证号码的前十七位数字乘以不同的权重系数,权重系数为7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2。
- 将乘积相加,然后取模11。
- 如果余数为0,则校验码为0;如果余数不为0,则校验码为11减去余数。
使用Python生成随机身份证号码
现在,我们来看看如何使用Python生成随机身份证号码。
import random
def generate_random_id_number():
"""生成随机身份证号码。"""
# 生成区域码
province_code = random.choice(['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', '71', '81', '82'])
# 生成出生日期码
year = random.randint(1900, 2099)
month = random.randint(1, 12)
day = random.randint(1, 28)
birth_date = str(year) + str(month).zfill(2) + str(day).zfill(2)
# 生成顺序码
sequence_code = random.randint(1000, 9999)
# 生成校验码
id_number = province_code + birth_date + str(sequence_code)
weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
checksum = 0
for i in range(17):
checksum += int(id_number[i]) * weights[i]
checksum %= 11
if checksum == 0:
check_code = '0'
elif checksum == 1:
check_code = 'X'
else:
check_code = str(11 - checksum)
# 返回生成的身份证号码
return id_number + check_code
# 生成10个随机身份证号码
for i in range(10):
id_number = generate_random_id_number()
print(id_number)
运行以上代码,即可生成10个随机身份证号码。
总结
这篇文章介绍了如何使用Python随机生成身份证号码,包括校验码的计算和身份证号码的校验。通过使用Python的强大功能,我们可以轻松玩转随机身份证生成。对于程序员来说,这不仅是一个有趣的练习,更是一个实用的工具。