关于随机数

2018-06-17 19:20:23来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

随机数在现代社会应用不可谓少,我们可以在每天用到的手机验证码,网上博彩,网上斗地主等等 中看到随机数的影子

7月27日晚9点,学习之余在如鹏网杨中科视频中便看到关于随机数的解释http://www.rupeng.com/Courses/Index/13

 

下面是自己定义的线性求同法求随机数

   public class MyRandom
    {
        private int seed;
        public MyRandom(int seed)
        {
            this.seed = seed;
        }
        public int Next()
        {
            int n = (seed*29  + 37) % 1000;
            this.seed = n;
            return n;
        }
    }
线性同余法

因为是线性,这种方法输入相同种子每次输出都是一样的结果

所以我们要给他加入一个可变参数来控制这个随机数

在客户端加入系统启动后经过时间的毫秒数  int tc = Environment.TickCount;

 int tc = Environment.TickCount;
            Console.WriteLine("tickCount=" + tc);
            //MyRandom mR = new MyRandom(5);
            MyRandom mR = new MyRandom(tc);
            for (int i = 0; i < 100; i++)
            {

                Console.WriteLine(mR.Next());
            }
            Console.ReadKey();
View Code

这种就好了很多,c#内部Random方法也是用的这种方法,

但是现在的网站大多都支持多用户并发操作。

所以,相同时间多个用户操作时会获得相同随机数,这就增加了网站的不稳定性

这时我们需要考虑用多个值来约束这个随机数,c#给出的解决方案是

byte[] randomBytes = new byte[3];
            RNGCryptoServiceProvider r =
            new RNGCryptoServiceProvider();
            for (int i = 0; i < 100; i++)
            {
                r.GetBytes(randomBytes);
                int rngNum = BitConverter.ToInt16(randomBytes, 0);
                Console.WriteLine(rngNum);
            }
            Console.ReadLine();

 

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:如何调用网页视屏插件

下一篇:[Freemarker] Getting Start