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;
            }
  • 相关阅读:
    MySQL5.7.19 服务挂掉 自动关闭 mysqld got exception 0xc000001d win 2008R2
    intellij IDEA VS(Visual Studio) 常用 高效 黄金 快捷键
    .Net MVC Cache 缓存技术总结
    HttpContext.Current.Cache 过期时间
    Sql Server 数据类型与 C# 数据类型对照
    Spring注解@Component、@Repository、@Service、@Controller @Resource、@Autowired、@Qualifier、@scope
    Hibernate注解映射联合主键的三种主要方式
    hibernate 查询全部数据的三种方法
    Springframework和Hibernate版本对应关系
    C# 反射总结 获取 命名空间 类名 方法名
  • 原文地址:https://www.cnblogs.com/beimingdaoren/p/12482329.html
Copyright © 2011-2022 走看看