zoukankan      html  css  js  c++  java
  • 随机码的生成

    通常使用DateTime的Tick作为Random函数的Seek,在本机测试没有问题,但是问题来了,在服务器上时,cpu运行很快,当连续的取随机数时,它们的Tick是一样的,因此产生的随机数也一样,代码如下:

     private static readonly string[] _allChar = new string[] { "0","1","2","3","4","5","6","7","8","9",
                "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","W","X","Y","Z"};
    
            /// <summary>
            /// 生成随机密码,由字符和数字组成
            /// </summary>
            /// <param name="length"></param>
            /// <returns></returns>
            public static string CreatePass(int length)
            {
                StringBuilder sbPass = new StringBuilder();
                Random seekRand = new Random(unchecked((int)DateTime.Now.Ticks));
                //生成起始序列值
                int beginSeek = (int)seekRand.Next(0, Int32.MaxValue - 10000 * length);
                int[] seeks = new int[length];
                for (int i = 0; i < length; i++)
                {
                    beginSeek += 10000;
                    seeks[i] = beginSeek;
                }
    
                //生成并抽取随机数字
                for (int i = 0; i < length; i++)
                {
                    Random rand = new Random(seeks[i]);
                    sbPass.Append(_allChar[rand.Next(35)]);
                }
                return sbPass.ToString();
            }
    

      如何解决产生的随机数一样呢?关键点在于Random的Seek,使用一个不重复的Seek即可,所以想到了Guid的HashCode:

      Random seekRand = new Random(Guid.NewGuid().GetHashCode());
    

      效果不错~!

    前面5个是后来生成的随机码,后面5个是之前生成的随机码

  • 相关阅读:
    [转]数据库优化方法(三)
    [转]根据性能监视器,分析性能瓶颈
    sqlserver获取表名,字段名
    VBA SQLServer 基本操作
    oracle常见权限分配
    oracle 里面定时执行任务,比如存储过程内容等
    cisco 路由配置
    cisco LAN
    mongodb的启动参数--quiet
    mongodb的IO测试工具 mongoperf
  • 原文地址:https://www.cnblogs.com/Kingdizzy/p/2744401.html
Copyright © 2011-2022 走看看