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

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

WBOY
WBOYOriginal
2016-07-06 13:30:331334Durchsuche

1. 火车票上*号打的是月,日,理论上的有最大366种组合; 2. 校验码是最后的一位,0-9及X,11个结果; 3. 那么,通过火车票上的身份证号,可以得到33个左右真正的有效身份证号; 4. 如果你能知道对方的星座(嗯,大家不是经常曝自己是什么星座么),那么,再

1. 火车票上*号打的是月,日,理论上的有最大366种组合;

2. 校验码是最后的一位,0-9及X,11个结果;

3. 那么,通过火车票上的身份证号,可以得到33个左右真正的有效身份证号;

4. 如果你能知道对方的星座(嗯,大家不是经常曝自己是什么星座么),那么,再将这30多个结果映射到12个星座中,最终可能性只有2-3个。。。 

5. 结论:晒车票,一定要打码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Geyunfei.CheckID
{
    class PRogram
    {

        static int[] a = new int[] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
        static char[] b = new char[] { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' };
        static int index = 0;
        static void Main(string[] args)
        {

            System.Console.WriteLine("输入火车票上的身份证号:");

            String a = System.Console.ReadLine();
            var year = int.Parse(a.Substring(6, 4));
            var beginDate = new DateTime(year, 1, 1);
            var chk = a.Substring(14);

            int days = 365;
            if (DateTime.IsLeapYear(year))
                days++;
            for(int i =0;i<days; i++)
            {
                var chkDate = beginDate.AddDays(i).ToString("MMdd");
                var id = a.Substring(0, 10) + chkDate + chk;
                CheckID(id);

            }
           

        }

        private static void CheckID(string id)
        {
            int sum = 0;
            for(int i = 0; i < 17; i++)
            {
                sum += int.Parse(id[i].ToString()) * a[i];
            }
            var chk = 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);
            }
        }

        private static String getAstro(int month, int day)
        {
            String[] starArr = {"魔羯座","水瓶座", "双鱼座", "牡羊座",
        "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座" };
            int[] DayArr = { 22, 20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22 };  // 两个星座分割日
            int index = month;
            // 所查询日期在分割日之前,索引-1,否则不变
            if (day < DayArr[month - 1])
            {
                index = index - 1;
            }
            index = index % 12;
            // 返回索引指向的星座string
            return starArr[index];
        }

    }
}

  


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn