当前位置: 代码迷 >> C# >> 小弟我的代码哪里有有关问题?为什么小弟我同学的身份证号可以循环出来而小弟我的身份证号循环不出来
  详细解决方案

小弟我的代码哪里有有关问题?为什么小弟我同学的身份证号可以循环出来而小弟我的身份证号循环不出来

热度:275   发布时间:2016-05-05 05:33:19.0
我的代码哪里有问题??为什么我同学的身份证号可以循环出来而我的身份证号循环不出来
本帖最后由 zhy934453950 于 2014-12-14 09:34:59 编辑
用C#写了段代码根据前14位循环最后4位所有可能性的C#控制台代码
代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.IO;
namespace sfz
{
    class Program
    {
        static int GetVNum(String num)
        {
            int[] n = new int[17] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
            int[] r = new int[11] { 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 };
            int i = 0, sum = 0;
            for (i = 0; i < 17; i++)
            {
                sum += ((int)Convert.ToInt32(num.Substring(i, 1))) * n[i];
            }
            sum %= 11;
            return r[sum];
        }
        static void Main(string[] args)
        {
            int a15, a16, a17;//定义第15、16、17、18位号码
            int r = 0;
            string a1_14;
            Console.WriteLine("请输入你要穷举身份证号码的前14位号码并以回车键结束");
            a1_14=Console.ReadLine();
            StreamWriter sw = new StreamWriter(@"身份证所有可能穷举记录.txt", true);
            for (a15 = 0; a15 <= 9; a15++)//对号码可能的后四位进行循环
            {
                for (a16 = 0; a16 <= 9; a16++)
                {
                    for (a17 = 0; a17 <= 8; a17 += 2)
                    {
                        r = GetVNum(a1_14 + a15 + a16 + a17);
                        Console.WriteLine("{0}{1}{2}{3}{4}",a1_14, a15, a16, a17, r == 10 ? "X" : Convert.ToString(r));
                        sw.WriteLine("{0}{1}{2}{3}{4}", a1_14,a15, a16, a17, r == 10 ? "X" : Convert.ToString(r));
                        sw.AutoFlush = true;
                        Thread.Sleep(50);
                    }
                }
            }
            Console.ReadKey();
        }
    }
}

可是为啥调试的时候我输了两个我同学的身份证号都能查到,就我的号码查不到呢?
上图:同学1    
            同学2
那么问题来了,本人号码为啥搜不到呢??
是我的代码出错?还是算法有问题还是。。。。求改正!还有那个a1_14=Console.ReadLine();如何用代码限制最多只能输14位
------解决思路----------------------
for (a17 = 0; a17 <= 8; a17 += 2)

为什么17位一定是偶数?性别歧视?
------解决思路----------------------
lz自己歧视自己?

引用:
for (a17 = 0; a17 <= 8; a17 += 2)

为什么17位一定是偶数?性别歧视?

------解决思路----------------------
引用:
Quote: 引用:

lz自己歧视自己?

Quote: 引用:

for (a17 = 0; a17 <= 8; a17 += 2)

为什么17位一定是偶数?性别歧视?
懂了懂了我忘了这是推算妹子的


喜闻乐见模式开启
------解决思路----------------------
引用:
还有个问题。那个a1_14=Console.ReadLine();如何用代码限制最多只能输14位?

最多14位的话就a1_14.Length<=14
如果全数据的话就Regex.IsMatch(a1_14,"^\d{14}$"),必须是4位数字
------解决思路----------------------
上面加。。。。都没定义的东西,怎么能不报错
------解决思路----------------------
引用:
Quote: 引用:

lz自己歧视自己?

Quote: 引用:

for (a17 = 0; a17 <= 8; a17 += 2)

为什么17位一定是偶数?性别歧视?
懂了懂了我忘了这是推算妹子的
重色亲友的蛋蛋
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

还有个问题。那个a1_14=Console.ReadLine();如何用代码限制最多只能输14位?

最多14位的话就a1_14.Length<=14
如果全数据的话就Regex.IsMatch(a1_14,"^\d{14}$"),必须是4位数字

我在  a1_14=Console.ReadLine();上面加上了a1_14.Length<=14;怎么报错了??

你应该在下面加,先读出来,然后判断读出来的东西
否则a1_14还没赋值你就判断长度,当然报错了