当前位置: 首页 > 科技观察

警报!别发火车票照片,分分钟暴露身份证号码

时间:2023-03-23 11:31:45 科技观察

是这样的:同事李大伟最近出差了。昨晚睡觉前翻了翻朋友圈,和他聊得很开心。图片来自Pexels。估计他记得我从不赌无把握,然后就泄气了。一杯奶茶也可以,跟杰伦一样开心,开工吧!我们来看看李大伟朋友圈晒出的图片:火车票来自异界,扫描车票暴露的个人信息可能会出现奇怪现象是:3302211993****4914李大伟,只有四个缺少月份和日期的数字,因此总共有365种可能性。科普时间:根据李大伟身份证信息前6位“330221”不难得到:李大伟是浙江宁波人,1993年出生,那我就用Python生成里面的所有日期1993:importtime#生成出生年份的所有日期defdateRange(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))foriinrange(bgn,end+1,3600*??24)]return[i.replace('-','')foriinlist_date]data_time=dateRange('1993')成功获取日期列表:使用之前的校准代码校验计算规则,逆向验证哪个日期匹配!自己写计算规则?NONONO,太麻烦了!先介绍一个库:id-validator。安装:pipinstallid-validator。可用于验证身份证号码的合法性,获取身份证号码信息,生成可通过验证的假数据,升级身份证。然后我们使用id-validator依次验证刚刚生成的身份证号:fromid_validatorimportvalidator#遍历所有日期,打印通过验证的身份证号defvali_dator(id1,id2,id3):foriindateRange(id2):theid=id1+i+id3ifvalidator.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作者:朱简介:小吴简介:某互联网公司数据分析师,热衷于爬虫、数据分析、可视化,个人公众号《凹凸玩数据》,为您带来有趣有趣的文章。