如何识别身份证号信息的数据?
目前有很多身份证号识别的网站,可以通过身份证号识别性别、出生日期、归属地等信息:
其实原理很简单,只需要1个身份证前六位与行政区域对照数据库即可实现,今天我把这个数据库送给大家,并用python实现身份证号查询,具体步骤如下:
1.身份证号识别原理
身份证号一般由18位号码组成,前6位为地址码,第7至14位为出生日期码,第15至17位为顺序码,第18位为校验码。6位地址码为编码对象户口所在县(市、区)的行政区划代码;8位出生日期码为出生年月日;3位顺序码为县(市、区)所辖派出所的分配码,顺序码的奇数分配给男性,偶数分配给女性;1位校验码是按统一公式计算出来的。
2.读取数据库
import pandas as pd
data=pd.read_excel('身份证行政区域对照表.xlsx')
此数据库包含前2、4、6位代码及对应的省级、地市级以及县区级地址,非常方便查询
3.根据原理实现python查询代码
判断身份证号真伪代码:
def check(idcard):
verification = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
sum = 0
for i, j in zip(list(idcard)[0:18], verification):
sum += int(i)*j
final_dic = {0: 1, 1: 0, 2: 'X', 3: 9, 4: 8, 5: 7, 6: 6, 7: 5, 8: 4, 9: 3, 10: 2}
if str(final_dic[sum % 11]) == str(idcard[17]):
return True
else:
return False
判断性别:
gender_id = {'0': '女', '1': '男'}
gender = gender_id[str(int(idcard[16]) % 2)]
判断年龄:
import datetime
age = int(datetime.datetime.now().year) - int(idcard[6:10])
判断地址:
address = data[data['前6位代码'].eq(int(idcard[:6]))]['区域全称'].values[0]
4.最终演示
import datetime
idcard='542301195808073257'
def check(idcard):
verification = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
sum = 0
for i, j in zip(list(idcard)[0:18], verification):
sum += int(i)*j
final_dic = {0: 1, 1: 0, 2: 'X', 3: 9, 4: 8, 5: 7, 6: 6, 7: 5, 8: 4, 9: 3, 10: 2}
if str(final_dic[sum % 11]) == str(idcard[17]):
return True
else:
return False
gender_id = {'0': '女', '1': '男'}
gender = gender_id[str(int(idcard[16]) % 2)]
age = int(datetime.datetime.now().year) - int(idcard[6:10])
address = data[data['前6位代码'].eq(int(idcard[:6]))]['区域全称'].values[0]
print('您要查询的身份证号为:{}'.format(idcard))
print('该身份证号地址为:{}'.format(address))
print('该身份证号年龄为:{}'.format(age))
print('该身份证号性别为:{}'.format(gender))
您要查询的身份证号为:542301195808073257
该身份证号地址为:西藏自治区日喀则地区日喀则市
该身份证号年龄为:62
该身份证号性别为:男
-完-
评论