zoukankan      html  css  js  c++  java
  • 使用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;
            }
  • 相关阅读:
    环境配置 | 安装Jupyter Notebook及jupyter_contrib_nbextensions库实现代码自动补全
    环境配置 | mac环境变量文件.bash_profile相关
    Django | 解决“(1146, "Table 'mydb.django_session' doesn't exist")”报错的方法
    Django | pycharm 提示 unresolved attribute referene 'objects' for class 'xxxx'
    站点中添加企业qq的几种方式
    div自适应高度
    SVN服务器搭建和使用(三)
    SVN服务器搭建和使用(二)
    SVN服务器搭建和使用(一)
    宽度为100%,缩小窗口,右侧的区域背景图片变成空白
  • 原文地址:https://www.cnblogs.com/beimingdaoren/p/12482329.html
Copyright © 2011-2022 走看看