namespace test
{
class Program
{
static void Main(string[] args)
{
//测试产生的验证码
Program checking= new Program();
for (int i = 0; i < 3; i++)
{
string str= checking.run(4);
Console.WriteLine(asd);
}
Console.Read(); }
/// <summary>
/// 生成验证码
/// </summary>
/// <param name="checkingLength">产生验证码的长度</param>
/// <returns>最后生成的验证码</returns>
public string run(int checkingLength )
{
//出现的随机数
string str = "1,2,3,4,5,6,7,8,9,0,A,a,B,b,C,c,D,d,E,e,F,f,G,g,H,h,I,i,J,j,K,k,L,l,M,m,N,n,O,o,P,p,Q,q,R,r,S,s,T,t,U,u,V,v,W,w,X,x,Y,y,Z,z";
//最后返回的验证码
string checkng = "";
Random ran = new Random();
//接收随机码的数组
string[] stringArry = str.Split(',');
//随机数组的下标值
int amout = 0;
for (int i = 0; i < checkingLength; i++)
{
//产生验证码数组的下标
int num = ran.Next(62);
//判断数组下标是否相同
if (num == amout)
{
//下标值改变
amout += i;
//果如改变的下标值超过数组索引界限
if (amout > stringArry.Length)
//将其数组下标缩小
amout = amout - (num / 2);
}
else
{
amout = num;
}
//拼接产生的验证码
checkng += stringArry[amout];
}
return checkng;
}
}
}这是我写的一个简单的验证码产生的算法,我想测试下产生的数据。结果显示的都一样,但是我打上断点输出的内容却不一样?很迷糊额,难道我这样测试不对嘛
asd是个毛啊?
刚测试了下,每次str的值不同啊!
修改如下:
string str =checking. run(4);
Thread.Sleep(50); Console.WriteLine(str);
class Program
{
static void Main(string[] args)
{
//测试产生的验证码
Program checking = new Program();
for (int i = 0; i < 3; i++)
{ string str = checking.run(4);
Console.WriteLine(str);
}
Console.Read(); }
/// <summary>
/// 生成验证码
/// </summary>
/// <param name="checkingLength">产生验证码的长度</param>
/// <returns>最后生成的验证码</returns>
public string run(int checkingLength )
{
//出现的随机数
string str = "1,2,3,4,5,6,7,8,9,0,A,a,B,b,C,c,D,d,E,e,F,f,G,g,H,h,I,i,J,j,K,k,L,l,M,m,N,n,O,o,P,p,Q,q,R,r,S,s,T,t,U,u,V,v,W,w,X,x,Y,y,Z,z";
//最后返回的验证码
string checkng = "";
Random ran = new Random();
//接收随机码的数组
string[] stringArry = str.Split(',');
//随机数组的下标值
int amout = 0;
for (int i = 0; i < checkingLength; i++)
{
//产生验证码数组的下标
int num = ran.Next(62);
//判断数组下标是否相同
if (num == amout)
{
//下标值改变
amout += i;
//果如改变的下标值超过数组索引界限
if (amout > stringArry.Length)
//将其数组下标缩小
amout = amout - (num / 2);
}
else
{
amout = num;
}
//拼接产生的验证码
checkng += stringArry[amout];
}
return checkng;
}
}
添加这个命名空间using System.Threading;
然后在加上我标注颜色的一句;
让主线程挂起 确实结局了问题额
{ string str = "1,2,3,4,5,6,7,8,9,0,A,a,B,b,C,c,D,d,E,e,F,f,G,g,H,h,I,i,J,j,K,k,L,l,M,m,N,n,O,o,P,p,Q,q,R,r,S,s,T,t,U,u,V,v,W,w,X,x,Y,y,Z,z";
string checkng = "";
var sl = str.Split(',').ToList<string>().OrderBy(s => Guid.NewGuid()).Take(checkingLength).ToList<string>(); foreach (var s in sl)
checkng += s;
return checkng;
}