美文网首页散文简友广场
身份证中的信息汇总

身份证中的信息汇总

作者: Cache_wood | 来源:发表于2021-04-05 07:04 被阅读0次

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

    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/

    相关文章

      网友评论

        本文标题:身份证中的信息汇总

        本文链接:https://www.haomeiwen.com/subject/nkxrkltx.html