社区所有版块导航
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 年前 • 595 次点击  

文中人物、身份证号码纯属虚构,如有雷同,就是抄我的,哈哈!

问题来源

五一来啦!不管是你,或者说是你的家人,可能马上就准备出去旅游了。
好在现在全国都通用 ”刷身份证进站“ 了,本文的情况你也许不会碰到。
但是,对于你们家里面的长辈,他们更习惯于取票后,再进站。
那么,我觉得你就有必要提醒他们,不要随意丢了自己的火车票,因为有可能会被不法分子捡到,识别了身份证后,做一些不好的事情。


本文介绍

事情的经过是这样的:


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


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


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



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


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


像杰伦一样快乐就好啦。


开工。


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


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


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

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


收工,


奶茶到手。



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


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


其实一次也没用试。


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


码着文


打开钉钉


看着李大伟的昵称



心里笑出猪叫。


本文相关代码已上传github:

https://github.com/zpw1995/aotodata/tree/master/interest/ID_card



推荐阅读:

入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径


干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记  | 灯谜答题王 |用Python做个海量小姐姐素描图 |


趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!


AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影


自动化办公:

PDF提取图片和表格 | html一键保存pdf Pdf转Word轻松搞定表格和水印! | Pdf转Word



年度爆款文案


点阅读原文,领全套AI资料!

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