写在前面
用python实现快速从身份证中explore尽量多的的信息,找了很多资料,发现并不全。参考已有的分享和其他信息自己写了。
能提取的信息:
出生日期、年龄、生肖、星座、省份、城市、区县、归属地地址、城市等级(2019划分标准)
id_card_area.xlsx 含省份、城市、区县、归属地地址
city_level.xlsx 含城市等级
两个文件可根据时间更新
代码
import pandas as pd
import numpy as np
area_info = pd.read_excel('id_card_area.xlsx', header = 0)
area_info = area_info.set_index('district_code')
city_level_2019 = pd.read_excel('city_level.xlsx', header = 0)
city_level_2019 = city_level_2019.set_index('city')
class GetIdInformation(object):
def __init__(self,id):
self.id = id
self.birth_year = int(self.id[6:10])
self.birth_month = int(self.id[10:12])
self.birth_day = int(self.id[12:14])
self.address_code = int(self.id[0:6])
def get_birthday(self):
"""通过身份证号获取出生日期"""
birthday = "{0}-{1}-{2}".format(self.birth_year, self.birth_month, self.birth_day)
return birthday
def get_sex(self):
"""男生:1 女生:0"""
num = int(self.id[16:17])
if num % 2 == 0:
return 0
else:
return 1
def get_age(self):
"""通过身份证号获取年龄"""
now = (datetime.datetime.now() + datetime.timedelta(days=1))
year = now.year
month = now.month
day = now.day
if year == self.birth_year:
return 0
else:
if self.birth_month > month or (self.birth_month == month and self.birth_day > day):
return year - self.birth_year - 1
else:
return year