zoukankan      html  css  js  c++  java
  • 不要在朋友圈晒你的火车票了,用python就能计算出你的身份证号码

    前言

    我们经常看到有朋友在朋友圈晒自己的行程,比如火车票信息:(人物、身份证号码纯属虚构,请勿当真)
    在这里插入图片描述

    分析

    车票中暴露的身份证号码为:3302211993****4914,只缺少月份日期四位。那么也就是365种可能,因为1993年不是闰年,只有365天。

    那我们就先用python生成1993年的所有日期:

    import time
    
    #生成出生当年所有日期
    def dateRange(year):
        fmt = '%Y-%m-%d'
        bgn = int(time.mktime(time.strptime(year+'-01-01', fmt)))
        end = int(time.mktime(time.strptime(year+'-12-31', fmt)))
        list_date = [time.strftime(fmt, time.localtime(i))for i in range(bgn, end+1, 3600*24)]
        return [i.replace('-', '') for i in list_date]
    
    data_time  = dateRange('1993')
    
    [
    '19930101', 
    '19930102', 
    '19930103',
    ···
    '19931229', 
    '19931230', 
    '19931231'
    ]
    

    然后再校验由这些日期构成的身份证号码的有效性。校验身份证号码的有效性不需要自己写代码,这里推荐一个已经封装好的库id-validator

    安装:

    pip install id-validator
    

    利用id-validator来依次校验刚才生成的身份证号码:

    from id_validator import validator
    import time
    
    #生成出生当年所有日期
    def dateRange(year):
        fmt = '%Y-%m-%d'
        bgn = int(time.mktime(time.strptime(year+'-01-01', fmt)))
        end = int(time.mktime(time.strptime(year+'-12-31', fmt)))
        list_date = [time.strftime(fmt, time.localtime(i))for i in range(bgn, end+1, 3600*24)]
        return [i.replace('-', '') for i in list_date]
    
    #遍历所有日期,print通过校验的身份证号码
    def vali_dator(id1, id2, id3):
        for i in dateRange(id2):
            theid = id1 + i + id3
            if validator.is_valid(theid):
                print(theid)
    
    vali_dator('330221','1993','4914')
    

    筛选出了34种结果:

    330221199301064914
    330221199301144914
    ···
    330221199312134914
    330221199312214914
    

    接下来就要通过身份证号码和姓名是否匹配来筛选最终的结果。以往的解决方案是:通过12306查询,在12306添加联系人,若身份证和姓名一致,就会显示校验通过。若不能通过,则说明身份证和姓名不一致。但现在这种方法已经不能用了

    然后我这里又找到了阿里云的实名认证接口,根据身份证姓名和身份证号码核对是身份信息是否一致。但只有企业用户才能使用,个人是没法用了,所以就不尝试了。
    在这里插入图片描述

    总结

    用python计算身份证号码的具体流程大概就是这样。当然出生月份和日期很多人都会在QQ或其它社交软件里面公开,一找就能找到。

    转载

    https://zhuanlan.zhihu.com/p/101334480

  • 相关阅读:
    连接数据库方法
    jdbc加载驱动方法
    MySQL数据库事务隔离级别
    事务和JDBC事务隔离级别
    IO
    java中从键盘输入的三种方法
    Java IO流学习总结八:Commons IO 2.5-IOUtils
    Java IO流学习总结七:Commons IO 2.5-FileUtils
    Java IO流学习总结五:转换流-InputStreamReader、OutputStreamWriter
    Java Code Examples
  • 原文地址:https://www.cnblogs.com/ghgxj/p/14491421.html
Copyright © 2011-2022 走看看