Python随机生成身份证号

# -*- coding: UTF-8 -*-
import random
import datetime

# 功能:从csv文件中读取一个区域编码字典
# 输入:文件名称
def areaCodeDict(fileName):
    dataDict = {}
    key=0
    value=1
    dataLine=open(fileName,encoding='utf-8').read().splitlines()
    for line in dataLine:
        tmpLst=line.split(",")
        dataDict[tmpLst[key]]=tmpLst[value]
    return dataDict

# 功能:随机生产一个区域码

def areaCode(Dict):
    codeList=[]
    for key in Dict.keys():
        codeList.append(key)
    lenth=len(codeList)-1
    i=random.randint(0,lenth)
    return codeList[i]
# 功能:随机生成1930年之后的出生日期
def birthDay():
    d1=datetime.datetime.strptime('1930-01-01 00:00:00', '%Y-%m-%d %H:%M:%S')
    d2=datetime.datetime.now()
    delta=d2-d1
    dys=delta.days
    i=random.randint(0,dys)
    dta=datetime.timedelta(days=i)
    bhday=d1+dta
    return bhday.strftime('%Y%m%d' )

#功能:随机生成3位序列号

def ordrNum():
    odNum=random.randint(100,999) #随机生成100到999之间的3为数据
    sex=odNum%2
    return (str(odNum),sex)

#功能:生成校验码

def check(id_num):
    i = 0
    count = 0
    weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] #权重项
    checkcode ={'0':'1','1':'0','2':'X','3':'9','4':'8','5':'7','6':'6','7':'5','8':'5','9':'3','10':'2'} #校验码映射
    for i in range(0,len(id_num)):
       count = count +int(id_num[i])*weight[i]
    return checkcode[str(count%11)] #算出校验码


fileName=".\\area.csv"  #区域文件地址
areaCodeDt=areaCodeDict(fileName)   #调用生成字典
areaCd=areaCode(areaCodeDt)     #生成区域码
areaCdName=areaCodeDt[areaCd]   #获取区域名称
birthDy=birthDay()   #生成出生日期
(ordNum,sex)=ordrNum()  #生成顺序号和性别
checkcode=check((areaCd+birthDy+ordNum)) #生产校验码
id_card=areaCd+birthDy+ordNum+checkcode  #拼装身份证号
print(id_card)

你可能感兴趣的:(Python)