欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

生成身份证号

最编程 2024-05-05 07:28:28
...

生成身份证号

import csv
import datetime
import random
import re

import pandas as pd
import radar

card_arr = {}
card_arr["110100"] = "北京市市辖区"
card_arr["710000"] = "*省"
card_arr["810000"] = "香港特别行政区"
card_arr["820000"] = "澳门特别行政区"


# 随机生成每个地区的身份证号,每个地区一个
def random_id():
    data_list = []
    for i, j in card_arr.items():
        data = {}
        # 生成随机生日
        ymd = radar.random_date(datetime.date(year=1920, month=1, day=1),
                                datetime.date(year=2022, month=10, day=1)).strftime("%Y%m%d")
        # 生成该地区同年同月同日出生人数的顺序数
        xxx = str(random.randint(0, 200)).zfill(3)
        # 得到17位身份证号
        id_17 = i + ymd + xxx
        # 计算身份证号的校验位,保证身份证号有效
        a = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
        valide = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]
        s = 0
        for i in range(len(id_17)):
            s += int(id_17[i]) * a[i]
        mod = s % 11
        id = id_17 + str(valide[mod])
        # print(id)
        y = id[6:10]
        m = id[10:12]
        d = id[12:14]
        s = id[16:17]
        sex = '男'
        shengri = y + '年' + m + '月' + d + '日'
        if int(s) % 2 == 0:
            sex = '女'
        xingbie = sex
        data['card'] = id
        data['area'] = j
        data['birthday'] = shengri
        data['sex'] = xingbie
        data_list.append(data)
    save(data_list)
    print('save is done!')


# 将数据存为csv文件
def save(data):
    header = ['card', 'area', 'birthday', 'sex']
    with open('./id_card.csv', 'w', encoding='utf8', newline='') as f:
        # 写
        writer = csv.DictWriter(f, header)
        # 写入标题
        writer.writeheader()
        # 将数据写入
        writer.writerows(data)


# 给csv文件添加id,和star_id列,便于配置实体
def add_field_id():
    ngData = pd.read_csv('./id_card.csv')
    ngList = []
    for index, row in ngData.iterrows():
        ngList.append(index + 1)

    ngData.insert(loc=0, column='star_id', value=ngList)
    ngData.insert(loc=0, column='id', value=ngList)

    ngData.to_csv('./id_card_new.csv', index=False)


if __name__ == '__main__':
    random_id()
    add_field_id()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者