最近项目比较赶紧,因此很少有自己专门写的笔记。多数内容都是从网络其他地方看到后收藏进菠菜园的。今天波波给大家分享的是如何还原被星号隐藏的身份证号。同时也特别提醒大家不要随意把火车票、车票等包含身份证号码的东西随意丢弃。
为了保护用户隐私同时又确保用户信息方便检查,很多公共服务机构会把用户身份证号码的一部分替换成星号,比如火车票经常把身份证的倒数第5位至倒数第8位(记录用户年月日的月日)用星号代替。以下步骤是还原过程。
一、下载并安装Tp-admin开发框架。
Tp-admin开发框架是波波基于ThinkAdmin二次开发的一款后端框架。下载安装地址:https://www.zkii.net/code/webcode/1637.html
这一步不做详细介绍,懂PHP编程经验都可轻松上手。
二、安装身份证验证类库:IdValidator
通过composer安装身份证验证类库IdValidator。安装指令如下:
- composer require "jxlwqq/id-validator"
如果您采用其他编程语言如Python、Go等,可以点击链接进入项目地址:https://github.com/jxlwqq/id-validator 进行查看。
之所以用这个类库,主要是为了方便对身份证号码进行验证。看完后面内容你就知道它的好处了。
三、编写程序,筛选身份证号
我们随意拿一个身份证号411327(19XX)****113X举例,我用括号特意括住了身份证号码中的年份,在本例中我们是知道年份的。
我们首先用程序生成身份证对应年份全年的日期(大约365个),然后把我们生成的年月日套入缺失的身份证中获得完整的身份证号,最后用第二步的类库对所有的身份证号码进行校验。程序如下:
- /**
- * 身份证核验
- */
- public function test(){
- $validator = new IdValidator();
- $period = new \DatePeriod(new \DateTime('19xx-01-01'),new \DateInterval('P1D'),new \DateTime('19xx-12-31'));
- $date = [];
- $name = urlencode("用户姓名");
- $api = "http://api.id98.cn/api/idcard?appkey=d10a8e06284cf889deaf93ffb5d9c60a&name=".$name."&cardno=";
- foreach ($period as $key=>$value){
- $date[] = $value->format('Ymd');
- }
- $Idcard = [];
- foreach ($date as $key=>$value){
- $t = "411327".$value."113X";
- if($validator->isValid($t)){
- $url = $api.$t;
- $result = HttpService::get($url);
- $Idcard[] = ['id'=>$t,'result'=>json_decode($result,true)];
- }
- }
- echo "<pre>";
- print_r($Idcard);
- }
四、总结
第三步中的代码算是比较完整的,已经内置了一个身份证实名认证的API接口。为了便于理解程序,我把foreach循环分开了,第一个foreach生成全年的日期数组,第二个对校验通过的身份证号通过API接口查询。
校验通过的身份证号大约是34~36个,这样大大节省接口查询费用。如果不方便通过接口查询或者不想花钱购买身份证验证接口,我们还可以通过一些购票平台、电商网站的实名认证来逐一测试。最后筛选出唯一正确的身份证号码。
附加:
关于查询一个人的身份证号码,除了本篇笔记中波波分享的方法外我们还可以通过社工的方式来获得。比如我们知道一个人家庭住址就可以反推身份证号码的前6位,通过社交账户就可以锁定一个人的出生日期,最后根据其他渠道获得一个人身份证的后四位。
写在最后:一定要保护好个人隐私,不要将车票、快递等包含个人信息的东西随意丢弃。