时间:2021-05-22
前1、2位数字表示:所在省份的代码;
第3、4位数字表示:所在城市的代码;
第5、6位数字表示:所在区县的代码;
第7~14位数字表示:出生年、月、日;
第15、16位数字表示:所在地的派出所的代码;
第17位数字表示性别:奇数表示男性,偶数表示女性;
第18位数字是校检码,计算方法如下:
(1)将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
(2)将这17位数字和系数相乘的结果相加。
(3)用加出来和除以11,取余数。
(4)余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的最后一位身份证的号码为1-0-X -9-8-7-6-5-4-3-2。(即余数0对应1,余数1对应0,余数2对应X…)
导入本地excel数据(身份证前六位)保存为字符串数组,然后生成身份证号码
import randomimport timeimport xlwtimport pandas as pd# 不把第1行作为列名,读取Excel那就没有列名,需增加参数:header=None# 第一个参数为身份证前六位的excel数据路径df = pd.read_excel('E:\Code\Python\ID_pre_six.xlsx', sheet_name='ID_pre_six', header=None)# 获取最大行nrows = df.shape[0]pre = []for iRow in range(nrows): # 将表中第一列数据写入pre数组中 pre.append(df.iloc[iRow, 0])def year(): '''生成年份''' # 从1960开始算,now-18直接过滤掉小于18岁出生的年份 now = time.strftime('%Y') second = random.randint(1960, int(now) - 18) return seconddef month(): '''生成月份''' three = str(random.randint(1, 12)) mon = three.zfill(2)# zfill() 方法返回指定长度的字符串,原字符串右对齐,前面填充0 return mondef day(year, month): '''生成日期''' four = str(getDay(year, month)) days = four.zfill(2) return daysdef getDay(year, month): '''根据传来的年月份返回日期''' # 1,3,5,7,8,10,12月为31天,4,6,9,11为30天,2月闰年为28天,其余为29天 aday = 0 if month in (1, 3, 5, 7, 8, 10, 12): aday = random.randint(1, 31) elif month in (4, 6, 9, 11): aday = random.randint(1, 30) else: # 即为2月判断是否为闰年 if ((year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)): aday = random.randint(1, 28) else: aday = random.randint(1, 29) return adaydef randoms(): '''生成身份证后三位''' ran = str(random.randint(1, 999)) five = ran.zfill(3) return five# 前17位身份证def ID(): first = random.choice(pre) second = year() three = month() four = day(second, three) five = randoms() # 前17位身份证 ID = str(first) + str(second) + three + four + five return IDdef ID_last(): ID_17 = ID() lid = list(map(int, ID_17)) # 将字符串数组转为int列表 weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] # 权重项 temp = 0 for i in range(17): temp += lid[i]*weight[i] checkcode = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']# 校验码映射 ID_last = checkcode[temp%11] return ID_last# 创建一个workbook 设置编码workbook = xlwt.Workbook(encoding='utf-8')# 创建一个worksheetworksheet = workbook.add_sheet('IDcard')# 设置单元格宽度worksheet.col(0).width = 5555for i in range(100):# 设置生成数量 IDcard = ID() + ID_last() worksheet.write(i, 0, IDcard) # 写入excel,参数对应 行, 列, 值workbook.save('IDcard.xlsx')# 运行后 会在当前目录生成一个IDcard.xlsxPS:爬取网页中哪个tag里的内容,可以浏览器页面,右键->查看网页源代码,如下图,我需要的内容都含在方框那个tag里:
参考:
到此这篇关于python批量生成身份证号到Excel的两种方法的文章就介绍到这了,更多相关python批量生成身份证号到Excel内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
以Excel为例,复制身份证号到表格后面几位变成0的原因是由于身份证号是18位的数字,将身份证号作为文本存储即可解决。 MicrosoftExcel是Micr
Excel小妙招分享:方法一:只要选中需要输入身份证号的单元格,在输入身份证号之前先输入一个单引号“’”,之后再输入身份证号
编写程序前先来了解下身份证号的构成:身份证号分为两种,旧的为15位,新的为18位。身份证15位编码规则:ddddddyymmddxxp其中dddddd:地区码y
excel中输入身份证号的时候由于数位较多,出现了类似1.2357E+16这样的形式,下面有两种方法提供给你,简单方便,看以下步骤: 步骤 方法一:先将
现在我们使用的都是18位身份证号,而以前都是15位身份证号,而如何将15位身份证号转18位身份证号转换为18位身份证号呢?1、首先,在15位身份证的第6位之后加