excel表格中身份证信息提取出生年月日,年龄,性别,出生地
excel表格中身份证信息提取出生年月日,年龄,性别,出生地身份证号码的意义1.年龄2.出生年月3.性别4.代码实现 出生地1.```报错:ModuleNotFoundError: No module named 'pandas'```2.```报错:ModuleNotFoundError: No module named 'lxml'```3.```报错:ModuleNotFoundError: No module named 'openpyxl'```4.最终成功输出一个Excel表格身份证号码的意义
①前1、2位数字表示:所在省份的代码,河南的省份代码是41哦!
②第3、4位数字表示:所在城市的代码;
③第5、6位数字表示:所在区县的代码;
④第7~14位数字表示:出生年、月、日;
⑤第15、16位数字表示:所在地的派出所的代码;
⑥第17位数字表示性别:奇数表示男性,偶数表示女性;
⑦第18位数字是校检码:也有的说是个人信息码,一般是随计算机随机产生,用来检验身份证的正确性。校检码可以是0~9的数字,有时也用x表示10。
1.年龄
=YEAR(NOW())-MID(A2,7,4)
=YEAR(NOW()) 这个函数,这个代表当前日期年份用当前年份减出生年份,也就是身份证号第7位数字的后4个数字,函数为mid(A2,7,4)A2代表身份证所在单元格,7表示从第7位开始,4表示选取4个数字。
2.出生年月
=TEXT(MID(A2,7,8),"0000年00月00日")
其中的A2表示的是身份证号码处在第A列第二行,7表示的是从第7位开始,8表示的是出生年月的8位,"0000-00-00"表示按照年月日的方式输出,年份占4位,月份和日期各占2位
3.性别
=IF(MOD(MID(A2,17,1),2),"男","女")
4.代码实现 出生地
/idsearch/index.asp(百度搜索身份证归属地查询第一个就是)。你在这个网站上输入身份证号码,它就会给你把性别、生日、户籍地给你弄出来。
接下来用爬虫实现
根据身份证号码获取户籍地、出生年月等信息
提前下载包
pandaslxmlopenpyxl
下载通用命令加速版:
pip install 包名 -i /simple
# 把需要用到的库一股脑import进来import importlib, sysimportlib.reload(sys)import timeimport pandas as pdimport urllib.requestfrom lxml import etreestart = time.time()# 先将存有身份证号码信息的txt文件读取进来df = pd.read_table('E:/SFZ.txt', sep='\t', header=None, dtype=str, na_filter=False)# 定义接下来存储身份证号码、性别、生日、户籍地信息的4个listidcard = []sex1 = []birthday1 = []address1 = []# 通过循环,依次将每个身份证号码对应的信息获取for i in range(df.shape[0]):# 多一个try,防止某个号码出差自己中止代码执行try:# print (df.iloc[i,0])# 查看身份证查询网页的网址,发现规律,按照规律组成urlurl = "/idsearch/index.asp?userid=" + df.iloc[i, 0] + "&action=idcard"headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'}# 获取内容request = urllib.request.Request(url=url, headers=headers)res = urllib.request.urlopen(request)content = res.read().decode('utf-8')# 解析网页源码 获取我们需要的数据tree = etree.HTML(content)sex = tree.xpath('//div[@class="bd"]//tbody/tr[2]/td[2]/p/text()')[0]birthday = tree.xpath('//div[@class="bd"]//tbody/tr[3]/td[2]/p/text()')[0]address = tree.xpath('//div[@class="bd"]//tbody/tr[5]/td[2]/p/text()')[0]# 添加到列表idcard.append(df.iloc[i, 0])sex1.append(sex)birthday1.append(birthday)address1.append(address)except Exception as e:print(Exception, ":", e)# 打包数据data = pd.DataFrame({'身份证号': idcard, '性别': sex1, '出生日期': birthday1, '所属地区': address1})print(data)# # 将数据输出成一个excel文件pd.DataFrame.to_excel(data, "E:\\person_card.xlsx", header=True, encoding='gbk', index=False)end = time.time()print(u'OK,爬虫结束!')print(u'总共耗时:' + str(end - start) + '秒')
1.报错:ModuleNotFoundError: No module named 'pandas'
win+Rcmd输入:pip install pandas -i /simple
回车
2.报错:ModuleNotFoundError: No module named 'lxml'
win+Rcmd输入:pip install lxml -i /simple
回车
3.报错:ModuleNotFoundError: No module named 'openpyxl'
win+Rcmd输入:pip install openpyxl -i /simple
回车