验证码的问题

cy527300280 2009-06-20 05:36:13
 protected string yzm()
{
string[] dzm ={ "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
string[] xzm ={ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };
string[] num ={ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
string str = "";
for (int j = 0; j < 3; j++)
{
Random r = new Random();
int i = r.Next(1, 3);

if (i == 1)
{
Random r1 = new Random();
int R1 = r1.Next(1, 26);
str += dzm[R1];

}
if (i == 2)
{
Random r2 = new Random();
int R2 = r2.Next(1, 26);
str += xzm[R2];
}

}
return str;
}

为什么循环输出的内容都相同啊,我该怎么改?
...全文
65 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
cy527300280 2009-06-20
  • 打赏
  • 举报
回复
了解了,谢谢大家哈
taz01 2009-06-20
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 lvjin110 的回复:]
引用 10 楼 taz01 的回复:
每次都使用相同的构造函数,是会产生相同的随机数的!



在上面代码中加上了System.Threading.Thread.Sleep(10);
这个问题就解决啦!
[/Quote]

是可以,一般都是使用不同构造函数吧
吕津 2009-06-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 taz01 的回复:]
每次都使用相同的构造函数,是会产生相同的随机数的!
[/Quote]

在上面代码中加上了System.Threading.Thread.Sleep(10);
这个问题就解决啦!
吕津 2009-06-20
  • 打赏
  • 举报
回复
可以分配分数了吧,楼主兄弟,呵呵。。
taz01 2009-06-20
  • 打赏
  • 举报
回复
每次都使用相同的构造函数,是会产生相同的随机数的!
吕津 2009-06-20
  • 打赏
  • 举报
回复
忘记说明了,我是在上面代码中加上了System.Threading.Thread.Sleep(10);
吕津 2009-06-20
  • 打赏
  • 举报
回复


string[] dzm = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
string[] xzm = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };
string[] num = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
string str = "";
for (int j = 0; j < 3; j++)
{
Random r = new Random();
int i = r.Next(1, 3);

if (i == 1)
{
Random r1 = new Random();
int R1 = r1.Next(1, 26);
str += dzm[R1];
System.Threading.Thread.Sleep(10);

}
if (i == 2)
{
Random r2 = new Random();
int R2 = r2.Next(1, 26);
str += xzm[R2];
System.Threading.Thread.Sleep(10);

}


}
this.tbCount.Text = str;
cy527300280 2009-06-20
  • 打赏
  • 举报
回复
加断点调试可以,结果输出三个不相同的字母,如果直接运行就不行了
yczf1836 2009-06-20
  • 打赏
  • 举报
回复
1、你要把所有字符放在一个数组。string[] dzm;
2、 //随机的字符串
string code = "";
//需要的随机字符个数
int codeLen=0;
Random rand = new Random();
for (int i = 0; i < codeLen; i++)
{
code += strArr[rand.Next(0, dzm.Length)];
}
吕津 2009-06-20
  • 打赏
  • 举报
回复

以下是我设置断点调试出的结果:

sFL

rwH

Jpu
吕津 2009-06-20
  • 打赏
  • 举报
回复
你设置断点,调试输出的三个字母相同的概率很小!
cy527300280 2009-06-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lvjin110 的回复:]
你没有判断i==3的情况!
[/Quote]
加了没用
taz01 2009-06-20
  • 打赏
  • 举报
回复
使用:
Random r = new Random(i*(int)DateTime.Now.Ticks);
吕津 2009-06-20
  • 打赏
  • 举报
回复
你没有判断i==3的情况!

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧