#identity card #现行身份证号为18位,分别为6位地址码,8位生日,3位顺序码,一位校验码 # 将第i位上的权重值记作Wi,Wi的值为 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 # 将身份证第i位的数字记作Ai # 则使用下列公式算出一个数S= Sum(Ai*Wi) mod 11 取11的模。 # 这样S的取值如下表(Y就是最终的校验码。): # 对每一个S做一个映射 Y,这样就有如下的表 # S:0 1 2 3 4 5 6 7 8 9 10 # Y:1 0 X 9 8 7 6 5 4 3 2 from datetime import date from datetime import timedelta import random #随机获取文件districtCode.txt中的一个地区代码,作为身份证的前六位 def getDistrictCode(): fp = open('districtCode.txt') lines = fp.readlines() DistrictCode = lines[random.randint(1, 3135)] return DistrictCode def generator(): DistrictCode = getDistrictCode().rstrip('\n')#地区代码生成后会有\n,所以要先去除 id = DistrictCode + '1980'#固定年份 # id = DistrictCode + str(random.randint(1950,2000))#出生年在1950~2000年之间 # da = date.today() + timedelta(days=random.randint(1, 366)) # id = id + da.strftime("%m%d")#月份和日期项 id = id + '0909'#固定月份和日期 id = id + str(random.randint(100,300))#顺序号简单处理 # print("id的前17位位:%s"%id) 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)): count = count + int(id[i])*weight[i] id = id + checkcode[str(count%11)] print(id) return id if __name__ == '__main__': for i in range(0,10): generator()
003.生成身份证号
猜你喜欢
转载自blog.csdn.net/baidu_27361307/article/details/80987750
今日推荐
周排行