所遇问题:

在做超市管理系统的登录项目时,在对“随机数的产生”出现一个问题,在产生多个随机数的时候,出现了产生了多个一样的随机数,具体代码如下:

   
     /// <summary>
/// 生成随机字符串
/// </summary>
/// <param name="length">字符串的长度</param>
/// <returns></returns>
public string RandomString(int length)
{
// 创建一个StringBuilder对象存储返回的验证码
StringBuilder sb = new StringBuilder();
//使用for循环把单个字符填充进StringBuilder对象里面变成自定义长度的字符串
for (int i = ; i < length; i++)
{
Random random = new Random();
//随机选择里面其中的一种字符生成
switch (random.Next(,))
{
case :
//调用生成生成随机数字的方法
sb.Append(Num());
break;
case :
//调用生成生成随机小写字母的方法
sb.Append(Small());
break;
case :
//调用生成生成随机大写字母的方法
sb.Append(Big());
break;
}
}
return sb.ToString();
}


调用的方法:

     /// <summary>
/// 生成单个随机数字
/// </summary>
private int Num()
{
Random random = new Random();
int num = random.Next(,);
return num;
} /// <summary>
/// 生成单个大写随机字母
/// </summary>
private string Big()
{
//A-Z的 ASCII值为65-90
Random random = new Random();
int num = random.Next(, );
string abc = Convert.ToChar(num).ToString();
return abc;
} /// <summary>
/// 生成单个小写随机字母
/// </summary>
private string Small()
{
//a-z的 ASCII值为97-122
Random random = new Random();
int num = random.Next(, );
string abc = Convert.ToChar(num).ToString();
return abc;
}

使用RandomString方法后,结果返回了相同的随机数,经过找资料后,给出的解释:

创建随机数的一个实例,并在每次需要随机数时使用它。通常,如果你有多个随机数实例,并通过代码在同一迭代中调用它们,那么最终将从每个实例中获得相同的数字。

解决办法:

使用Random时加上System.Guid.NewGuid().GetHashCode(),即:Random random = new Random(System.Guid.NewGuid().GetHashCode()); 具体代码如下:

     /// <summary>
/// 生成单个随机数字
/// </summary>
private int Num()
{
Random random = new Random(System.Guid.NewGuid().GetHashCode());
int num = random.Next(,);
return num;
} /// <summary>
/// 生成单个大写随机字母
/// </summary>
private string Big()
{
//A-Z的 ASCII值为65-90
Random random = new Random(System.Guid.NewGuid().GetHashCode());
int num = random.Next(, );
string abc = Convert.ToChar(num).ToString();
return abc;
} /// <summary>
/// 生成单个小写随机字母
/// </summary>
private string Small()
{
//a-z的 ASCII值为97-122
Random random = new Random(System.Guid.NewGuid().GetHashCode());
int num = random.Next(, );
string abc = Convert.ToChar(num).ToString();
return abc;
}

最新文章

  1. javascript 函数初探 (二)--- 那些年的预定义函数
  2. nginx + tomcat配置负载均衡
  3. Navigator对象、Screen对象
  4. Hibernate关联映射及高级查询
  5. GridView块布局
  6. 【新产品发布】【iM_TFTRGB 液晶驱动模块】
  7. web开发workflow
  8. Java之循环语句练习1
  9. C#中的USB库 WinUSB
  10. Android 常用开源代码整理
  11. Macbook下安装管理MySQL
  12. SQL2005查询死锁的表和具体的语句
  13. ospf的虚连接配置
  14. PIL库的总结及运用
  15. ring0与ring3通信方式
  16. Python实现批量梯度下降算法
  17. 文本编辑框QTextEdit
  18. train_val.prototxt文件和deploy.prototxt文件开头的区别
  19. Win10通知区域图标设置;windows10系统图标合并;Windows10系统通知合并
  20. 新建maven遇到的错误

热门文章

  1. DIV的失去焦点(blur)实现
  2. bootstrapValidator验证的remote中data属性里获取select一直是默认值
  3. Vue项目二、vue环境搭建以及Vue-cli使用及详解
  4. Git建立本地分支和远程分支的映射关系
  5. 判断某个点是否在某个view上
  6. 2019年高校微信小程序开发大赛学习笔记
  7. Redis篇之操作、lettuce客户端、Spring集成以及Spring Boot配置
  8. h5样式
  9. ES6整体内容
  10. turtle学习笔记续集