如何识别身份证号信息的数据?

共 1957字,需浏览 4分钟

 ·

2020-12-21 15:36

前有很多身份证号识别的网站,可以通过身份证号识别性别、出生日期、归属地等信息:

其实原理很简单,只需要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 = [7910584216379105842]
    sum = 0
    for i, j in zip(list(idcard)[0:18], verification):
        sum += int(i)*j
    final_dic = {01102'X'39485766758493102}
    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 = [7910584216379105842]
    sum = 0
    for i, j in zip(list(idcard)[0:18], verification):
        sum += int(i)*j
    final_dic = {01102'X'39485766758493102}
    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
该身份证号性别为:男

-完-

浏览 67
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报