用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自己歧视自己?
------解决思路----------------------
喜闻乐见模式开启
------解决思路----------------------
还有个问题。那个a1_14=Console.ReadLine();如何用代码限制最多只能输14位?
最多14位的话就a1_14.Length<=14
如果全数据的话就Regex.IsMatch(a1_14,"^\d{14}$"),必须是4位数字
------解决思路----------------------
上面加。。。。都没定义的东西,怎么能不报错
------解决思路----------------------
懂了懂了我忘了这是推算妹子的
lz自己歧视自己? 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位数字
我在 a1_14=Console.ReadLine();上面加上了a1_14.Length<=14;怎么报错了??
你应该在下面加,先读出来,然后判断读出来的东西
否则a1_14还没赋值你就判断长度,当然报错了