身份证中的信息汇总


每个人都有一个独特的身份证号,名字可能会有重名,但身份证号不会。

XXYYZZ ABCD EF GH IJK L 身份证号长度是18位,前17位全部是数字,第18位多数人是数字,少数人是字母“X”,实际是罗马数字10。

前六位:省市县

前6位:XXYYZZ 省市县(户口所在地的行政区代码)

中间八位:出生年月日

ABCD为出生年,EF为出生月,GH为出生日;IJK为顺序编码(在同一区域内,对同一天出生的人员编制的顺序号)。

倒数第二位:性别

K为性别代码(单数为男,双数为女);

由上可知,如果知道真实的身份证号,那么就可以得到地址、生日和性别。

最后一位:校验码

L为末位校验码(按统一的公式计算出来,计算结果是数字0-10,用X代替10)。

根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。

身份证的最后一位是根据前面的十七位数字码而生成的校验码,所以生成校验码就会有一个算法的存在。

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;

在网上找到了省市区六位代码写成了文件shenfen.txt,简单尝试了一下,可能还有很多疏漏。

# -*- coding: utf-8 -*-
"""
Created on Sat Apr  3 20:11:39 2021

@author: lenovo
"""

import sys

number = input('请输入身份证号:')
lis1 = [int(i) for i in number]
lis2 = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]

if len(number)!=18:
    print('身份证号位数有误')
    sys.exit(0)
    
verify = sum(lis1[i]*lis2[i] for i in range(17))%11

test1 = [i for i in range(11)]
test2 = [1,0,'X',9,8,7,6,5,4,3,2]

month = [i+1 for i in range(12)]
year = [i for i in range(1900,2021)]
day = [i+1 for i in range(31)]

for i in range(len(test1)):
    if i!=2:
        if test1[i] == verify:
            if test2[i]==eval(number[-1]):
                pass
            else:
                print('身份证号错误')
                sys.exit(0)
    else:
        if test1[i] == verify:
            if test2[i]==number[-1]:
                pass
            else:
                print('身份证号错误')
                sys.exit(0)

f = open('shenfen.txt','r',encoding = 'utf-8')
txt = f.readline()

flag = 1
for txt in f:
    info = txt.split()
    #print(info)
    if info[0] == number[:6]:
        if int(number[6:10]) in year:
            if int(number[10:12]) in month:
                if int(number[12:14]) in day:
                    print('\n地区:{}'.format(info[1]))
                    print('生日:{}年{}月{}日'.format(number[6:10],number[10:12],number[12:14]))
                    
                    if int(number[-2])%2!=0:
                        print('性别:男')
                    else:
                        print('性别:女')
                    flag = 0
                else:
                    print('身份证号错误')
if flag:
    print('未查询到结果')

f.close()

代码放在了我的gitee上,顺便复习了一下git的使用哈哈。

git init
git status

git add shenfen.txt shenfenzheng.py
git commit -m 'update'

git remote add identity 'https:www.gitee/Waston-swx/identity.com'
git remote -v

git pull origin master
git push origin master

在这里插入图片描述
在这里插入图片描述
线上查询的网址:http://www.dffyw.com/sfzcx/

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cachel wood

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值