使用C#写了一个可以推算火车票身份证号码的小程序
1.火车票上*号打的是月,日,理论上的有最大366种组合;
2.校验码是最后的一位,0-9及X,11个结果;
3.那么,通过火车票上的身份证号,可以得到33个左右真正的有效身份证号;
4.如果你能知道对方的星座(嗯,大家不是经常曝自己是什么星座么),那么,再将这30多个结果映射到12个星座中,最终可能性只有2-3个。。。
5.结论:晒车票,一定要打码
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; namespaceGeyunfei.CheckID { classProgram { staticint[]a=newint[]{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; staticchar[]b=newchar[]{'1','0','X','9','8','7','6','5','4','3','2'}; staticintindex=0; staticvoidMain(string[]args) { System.Console.WriteLine("输入火车票上的身份证号:"); Stringa=System.Console.ReadLine(); varyear=int.Parse(a.Substring(6,4)); varbeginDate=newDateTime(year,1,1); varchk=a.Substring(14); intdays=365; if(DateTime.IsLeapYear(year)) days++; for(inti=0;i<days;i++) { varchkDate=beginDate.AddDays(i).ToString("MMdd"); varid=a.Substring(0,10)+chkDate+chk; CheckID(id); } } privatestaticvoidCheckID(stringid) { intsum=0; for(inti=0;i<17;i++) { sum+=int.Parse(id[i].ToString())*a[i]; } varchk=b[sum%11]; if(chk==id[17]) { index++; Console.WriteLine(getAstro(int.Parse(id.Substring(10,2)),int.Parse(id.Substring(12,2)))+index.ToString()+""+id); } } privatestaticStringgetAstro(intmonth,intday) { String[]starArr={"魔羯座","水瓶座","双鱼座","牡羊座", "金牛座","双子座","巨蟹座","狮子座","处女座","天秤座","天蝎座","射手座"}; int[]DayArr={22,20,19,21,21,21,22,23,23,23,23,22};//两个星座分割日 intindex=month; //所查询日期在分割日之前,索引-1,否则不变 if(day<DayArr[month-1]) { index=index-1; } index=index%12; //返回索引指向的星座string returnstarArr[index]; } } }