破解火车票上的身份证号码

首先我在百度上找到了一个他人的火车票图片

接着从图片里我们可以获取到信息如下:

姓名 梅勇
性别 男 (倒数第四位至倒数第二位3位数为顺序码,顺序码为奇数所以为男性)
(可参考http://www.cnblogs.com/xudong-bupt/p/3293838.html)
来自 武汉市新洲区 (身份证号码前六位代表地区)
(可参考http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/200406/t20040607_38302.html)

身份证号码:4201171988xxxx1638

得到上述消息后,我们可以通过身份证号码验证算法对其进行有效性验证和排除。
(可参考http://www.cnblogs.com/xudong-bupt/p/3293838.html)

我用JS实现了一个有效性验证,代码如下:

 1 var sfz_qian="4201171988";
 2 var sfz_hou4="1638";
 3 var sfzhm="";
 4 for(i=1;i<=12;i++)
 5 {
 6   //为了程序的方便,我就假设每个月有31天
 7   for(j=1;j<=31;j++){
 8         if(i<10){
 9             if(j<10){
10                 sfzhm=sfz_qian+"0"+i+"0"+j+sfz_hou4;
11             }else{
12                 sfzhm=sfz_qian+"0"+i+j+sfz_hou4;
13             }
14             result=getvalidcode(sfzhm);
15                 if(result!=false){
16                         console.log(result);
17                 }
18
19         }else{
20             if(j<10){
21                                sfzhm=sfz_qian+i+"0"+j+sfz_hou4;
22                         }else{
23                                sfzhm=sfz_qian+i+j+sfz_hou4;
24                         }
25             result=getvalidcode(sfzhm);
26                     if(result!=false){
27                   console.log(result);
28                     }
29
30         }
31
32         }
33     }
34
35
36
37 function getvalidcode(sfzhm_new){
38
39 var sum=0;
40 var weight=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];
41 var validate=[‘1‘,‘0‘,‘X‘,‘9‘,‘8‘,‘7‘,‘6‘,‘5‘,‘4‘,‘3‘,‘2‘];
42 for(m=0;m<sfzhm_new.length-1;m++){
43 sum+=sfzhm_new[m]*weight[m];
44 }
45 mode=sum%11;
46 if(sfzhm_new[17]==validate[mode]){
47     return sfzhm_new;
48 }else{
49     return false;
50 }
51
52 }

代码运行后如下:

接着我们导出35条记录做为字典,拿到12306进行暴力添加常用联系人,最后我们得到了该图片上面的身份证号码了

时间: 2024-10-29 13:20:36

破解火车票上的身份证号码的相关文章

深夜脑洞,写了一个可以推算火车票身份证号码的小程序

1. 火车票上*号打的是月,日,理论上的有最大366种组合: 2. 校验码是最后的一位,0-9及X,11个结果: 3. 那么,通过火车票上的身份证号,可以得到33个左右真正的有效身份证号: 4. 如果你能知道对方的星座(嗯,大家不是经常曝自己是什么星座么),那么,再将这30多个结果映射到12个星座中,最终可能性只有2-3个... 5. 结论:晒车票,一定要打码 using System; using System.Collections.Generic; using System.Linq; u

身份证号码算法的实现

18位身份证标准在国家质量技术监督局于1999年7月1日实施的gb11643-1999<公民身份号码>中做了明确的规定.gb11643-1999<公民身份号码>为gb11643-1989<社会保障号码>的修订版,其中指出将原标准名称"社会保障号码"更名为"公民身份号码",另外gb11643-1999<公民身份号码>从实施之日起代替gb11643-1989. gb11643-1999<公民身份号码>主要内容如

Java实现身份证号码校验

二话不说,直接上代码. /** * 校验18位身份证号 * * @param identityCode * * 返回true则表示校验通过 */ public boolean checkIdentityCode(String identityCode) { // 校验身份证位数为18位 if (!identityCode.matches("\\d{17}(\\d|x|X)$")) { return false; } Date d = new Date(); DateFormat df

iOS身份证号码识别

一.前言 ??身份证识别,又称OCR技术.OCR技术是光学字符识别的缩写,是通过扫描等光学输入方式将各种票据.报刊.书籍.文稿及其它印刷品的文字转化为图像信息,再利用文字识别技术将图像信息转化为可以使用的计算机输入技术. ??因为项目需要,所以这些天查阅了相关资料,想在网上看看有没有大神封装的现成的demo可以用.但是无果,网上关于ocr这一块的资料很少,比较靠谱的都是要收费的,而且价格也不便宜.但是在天朝,收费感觉心里不爽,所以就决定自己研究一番. ??先上一个最终实现的效果(如果mac不是r

JAVA验证身份证号码是否合法

package com.chauvet.utils; import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.HashMap;import java.util.Map;import java.util.regex.Match

java验证身份证号码是否有效源代码

1.描述 用java语言判断身份证号码是否有效,地区码.出身年月.校验码等验证算法 2.源代码 package test; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.Hashtable; import java.util.Scanner; imp

详细验证身份证号码规则和姓名(汉字)的java代码

一.验证汉字的正则表达式 /** 是否是汉字的正则 */ private String regexIsHanZi = "[\\u4e00-\\u9fa5]+"; * @param str要匹配的字符串 * @param reg 正则 public static boolean matchRegular(String str, String reg) { Pattern pattern = Pattern.compile(reg); Matcher matcher = pattern.m

java验证身份证号码是否有效源代码 wn25的头像 wn25 23 2015-01-04 20:09 6 基本信息 Java &#215; 1 浏览

原文:http://www.open-open.com/code/view/1420373343171 1.描述 用java语言判断身份证号码是否有效,地区码.出身年月.校验码等验证算法 2.源代码 package test; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.GregorianCalendar; impor

Java 批量随机生成身份证号码

package org.service.task.fees; import java.util.Calendar; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** * * 身份证算法实现 * * 1.号码的结构 公民身份号码是特征组合码, 由十七位数字本体码和一位校验码组成. 排列顺序从左至右依次为:六位数字地址码,八位数字出生日