社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

警惕啊,不要随便发车票照片了,用Python可以算出了你的身份证号码!

菜鸟学Python • 4 年前 • 296 次点击  

为了一杯奶茶。

事情的经过是这样的:


我的同事李大伟最近出差去了。


昨晚睡觉前翻了翻朋友圈,


就跟他愉快地 互怼 交流了起来。



估计是他想起了我朱小五从不打无把握之赌,后面就怂了。


一杯奶茶嘛,也可以接受,


像杰伦一样快乐就好啦。


开工。


先看看李大伟的朋友圈中发的图片。


(该火车票来自其他平行世界,扫描可能发生奇怪现象)


车票中暴露的个人信息为:

3302211993****4914  李大伟


只缺少月份日期四位。


那么也就是一共365种可能。


科普时间:



根据李大伟的身份证信息的前6位“330221


轻易可得:



浙江省宁波人,1993年滴


那我先用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')


成功得到日期列表。



再用刚才的校验码计算规则


反向验证哪个日期符合喽!


自己写计算规则?


NONONO,太麻烦!


给大家隆重介绍一个库:id-validator


安装:pip install id-validator


可以用来验证身份证号合法性、获取身份证号信息、生成可通过校验的假数据、身份证升级。



那么我们利用 id-validator 来依次校验刚才生成的身份证号码。


from id_validator import validator

#遍历所有日期,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')


运行结果:




有33个都符合校验逻辑,这只筛掉了90%啊


这就尴尬了


如何在33个日期中挑出来李大伟的真实出生日期呢?


思考了一下


(其实是百度了一波)


这里需要我们每个人都用过的12306。



打开12306官网,


在12306添加常用联系人,


将李大伟+身份证号依次输入。


若身份证和姓名一致,就会显示校验通过;


若不能通过,则说明身份证和姓名不一致。



最终可以测出李大伟的出生日期是:19930608


收工,


奶茶到手。




大家是不是想知道我到底试了多少次才成功的?


刚刚回来的李大伟也表示很想知道。


其实一次也没用试。


现在我喝着李大伟买的奶茶


码着文


打开钉钉


看着李大伟的昵称



心里笑出杠铃般的猪叫。需要源码后台输入: 【算号码】

往期热门:
51个Python鲜为人知的秘密特性,老司机看完都惊叹不已
九大神招,让Python里数据分析神器Jupyter,完美升华
Python里三个最高逼格的调试神器


千人学习群:
小密圈的趣味实战-微信主题
小密圈人气很高的两个实战项目

酷玩游戏:
太好玩了!用Python写个弹球游戏2.0
强烈推荐,用Python轻松打造定制款《植物大战僵尸》
太好玩了,我用Python写了个火影忍者版的连连看


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/48010
 
296 次点击