解密如何通过一张火车票还原完整身份证号码

2016-05-08 10:17 评论 1 条 隐藏侧边

本篇文章将演示如何通过一张火车票来还原完整的身份证号码

 

买过火车票的人都知道票面有完整姓名和不完整的身份证号码,身份证号码中出生月份和日期四位是打*的,这样就真的安全吗?通过一些简单的方法就可以还原出来完整的身份证号码,比如通过Excel函数,由于本人是码农,对编程更熟悉些,本次就通过PHP来还原身份证号码。

下图是本次要还原的一张火车票:

演示的火车票

身份证号码编排规则

首先让大家先了解下身份证号码编排规则。第二代公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。顺序码的奇数分给男性,偶数分给女性。校验码是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。

身份证号码说明

通过代码来完成还原过程

1.先通过循环生成10000个可能的号码,范围为0000到9999

生成下面的号码(太多只截图部分号码):

2.然后再筛选出来符合常规日期格式号码

通过日期格式的筛选,只剩下300多种可能性了,而不是最初对应的10000种可能,但是还有办法可以将这个数字再次减少,那就是通过最后一位校验码来去除部分检验失败的号码。

关于最后一位检验码算法网络上有很多说明,这个校检码不是随机产生的,而是由号码编制单位按统一的公式计算出来的,校检码可以是0—9的数字,如果是10,则用x表示。它是用来检验身份证号码的正确性,可以保证公民的身份证符合国家标准。

简单的说就是通过前17位号码经过一系列的计算,最后得出的校验码。

通过校验位校验的方式再筛选出来可能的号码,这回就剩30多个了,核心函数就不在截图范围内了,只说思路:

通过12306的确定最后的真实号码

最后一步,登录12306网站。在常用信息管理下的“常用联系人”管理里面,添加常用联系人

依次输入筛选出来的姓名和号码,如果姓名和身份证号码不匹配,那么就会出现“待验证”的字样,如果匹配,就会提示“已通过”,那么只需要将这30多个可能的号码添加验证,就可以得到姓名对应的正确的身份证号码了。接下来的就不一一验证了!

站在程序员的角度来看,在互联网界里是没有绝对的安全,只有更安全,没有任何一个企业敢说自己产品是绝对安全的,曾获得《EAL3级信息安全等级认证》,号称是目前国内最高级别的邮件系统安全认证的某易公司,不也是惨被打脸!也说明火车票的打*效果并不安全,其实最后四位打*的效果会好的多。而作为一名网民来讲,一定要保护好自己的火车票的信息,千万不能随手乱扔,或拍照不处理直接上传到互联网,以防图谋不轨之人加以利用,比如验证密保问题,重置各种帐号密码。

版权声明: 本文为原创文章,版权归本站所有,欢迎分享本文,转载请保留出处!
转载请注明: 《解密如何通过一张火车票还原完整身份证号码》 | 沈立洋博客
 分类:爱折腾  标签:

发表评论:


插入表情

  1. 匿名【码畜】 @回复

    我的帐号怎么没了