使用RandomString方法后,结果返回相同的随机数解决办法
所遇问题:
在做超市管理系统的登录项目时,在对“随机数的产生”出现一个问题,在产生多个随机数的时候,出现了产生了多个一样的随机数,具体代码如下:
/// <summary> /// 生成随机字符串 /// </summary> /// <param name="length">字符串的长度</param> /// <returns></returns> public string RandomString(int length) { // 创建一个StringBuilder对象存储返回的验证码 StringBuilder sb = new StringBuilder();
//使用for循环把单个字符填充进StringBuilder对象里面变成自定义长度的字符串 for (int i = 0; i < length; i++) { Random random = new Random(); //随机选择里面其中的一种字符生成 switch (random.Next(0,3)) { case 0: //调用生成生成随机数字的方法 sb.Append(Num()); break; case 1: //调用生成生成随机小写字母的方法 sb.Append(Small()); break; case 2: //调用生成生成随机大写字母的方法 sb.Append(Big()); break; } } return sb.ToString(); }
调用的方法:
/// <summary> /// 生成单个随机数字 /// </summary> private int Num() { Random random = new Random(); int num = random.Next(0,10); return num; } /// <summary> /// 生成单个大写随机字母 /// </summary> private string Big() { //A-Z的 ASCII值为65-90 Random random = new Random(); int num = random.Next(65, 91); 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(97, 123); 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(0,10); return num; } /// <summary> /// 生成单个大写随机字母 /// </summary> private string Big() { //A-Z的 ASCII值为65-90 Random random = new Random(System.Guid.NewGuid().GetHashCode()); int num = random.Next(65, 91); 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(97, 123); string abc = Convert.ToChar(num).ToString(); return abc; }
北冥有时候愚笨,如果文章或代码上有什么表达不对或不恰当的地方,还望各位道友不吝赐教(✿◠‿◠)~~