Random随机数种子生成,减少生成重复随机数的可能

我们都知道使用Random可以生成随机数,默认的无参的构造函数New Random()。使用与时间相关的默认种子值,初始化 System.Random 类的新实例。

这种方式生成随机数时重复的概率很大。可以传入一个种子,用来计算伪随机数序列起始值的数字。

        /// <summary>
        /// 创建加密随机数生成器 生成强随机种子
        /// </summary>
        /// <returns></returns>
        private static int GetRandomSeed()
        {
            byte[] bytes = new byte[4];
            System.Security.Cryptography.RNGCryptoServiceProvider rng
                = new System.Security.Cryptography.RNGCryptoServiceProvider();
            rng.GetBytes(bytes);
            return BitConverter.ToInt32(bytes, 0);
        }
        private static int GenerateRandom()
        {
            int seed = GetRandomSeed();

            return new Random(seed)
                .Next(Int32.MaxValue);
        }

 

RNGCryptoServiceProvider 类

使用加密服务提供程序 (CSP) 提供的实现来实现加密随机数生成器 (RNG)。

posted @ 2017-06-24 22:39  pengtan  阅读(1873)  评论(0编辑  收藏  举报