• 使用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;
            }
  • 相关阅读:
    Android自定义drawable(Shape)详解
    如何设置对话框的宽度和高度
    Android资料之-EditText中的inputType
    android4.0 禁止横竖屏切换使用 android:configChanges="orientation|keyboardHidden"无效的解决方法
    android ScrollView 充满屏幕
    治疗神经衰弱最有效的方法和药物是什么
    交换机和路由器的区别
    小众编程语言同样值得你关注
    RotateAnimation详解
    你可能没听过的 Java 8 中的 10 个特性
  • 原文地址:https://www.cnblogs.com/beimingdaoren/p/12482329.html
Copyright © 2020-2023  润新知