栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

利用python生成证件ID

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

利用python生成证件ID

用到的行政区域编码:area_dict.json

实现代码

import re
import random
from datetime import datetime, timedelta, date
import json

area_dict = json.load(open('area_dict.json','r')) # 行政区域编码

id_code_list = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
check_code_list = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]

# 证件号校验
def is_id_card(id_number):
    if len(id_number) != 18:
        return False, "Length error"
    if not re.match(r"^d{17}(d|X|x)$", id_number):
        return False, "Format error"
    if id_number[0:6] not in area_dict:
        return False, "Area code error"
    try:
        date(int(id_number[6:10]), int(id_number[10:12]), int(id_number[12:14]))
    except ValueError as ve:
        return False, "Datetime error: {0}".format(ve)
    if str(check_code_list[sum([a * b for a, b in zip(id_code_list, [int(a) for a in id_number[0:-1]])]) % 11]) != 
            str(id_number.upper()[-1]):
        return False, "Check code error"
    return True, "{}省 {}市 {}".format(area_dict[id_number[0:2] + "0000"].rstrip("省"),
                                     area_dict[id_number[0:4] + "00"].rstrip("市"),
                                     area_dict[id_number[0:6]])

# 生成证件号
def gen_id_card(area_code, age, gender):
    if str(area_code) not in area_dict.keys():
        return None
    datestring = str(date(date.today().year - age, 1, 1) + timedelta(days=random.randint(0, 364))).replace("-", "")
    rd = random.randint(0, 999)
    if gender == 0:
        gender_num = rd if rd % 2 == 0 else rd + 1
    else:
        gender_num = rd if rd % 2 == 1 else rd - 1
    result = str(area_code) + datestring + str(gender_num).zfill(3)
    return result + str(check_code_list[sum([a * b for a, b in zip(id_code_list, [int(a) for a in result])]) % 11])


if __name__ == "__main__":
    area_code = random.choice(["420102", "420103", "420104", "420105", "420106", "420107"]) # 证件区域
    id_number = gen_id_card(int(area_code), 22, 1) # 指定区域id、年龄及性别,随机生成证件号
    print("生成的证件号:{}".format(id_number))
    print("检验结果:{}".format(is_id_card(id_number)))

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/269081.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号