Random类短期大量随机重复的问题

先声明一下,我是在那篇文章上看到的解决方法:算法

http://dl.download.csdn.net/down10/20141103/4b173214e41ff3207305c2470524b0f3.zip?response-
content-disposition=attachment%3Bfilename%3D%E8%84%9A%E6%9C
%AC.zip&OSSAccessKeyId=9q6nvzoJGowBj4q1&Expires=1454872774&Signature=HKeFoCiyZteMjgO9ScKmje
iXMg4%3D网络

方法其实没啥不一样 只是代码因为大神手打,致使代码大小写不清楚,新人看到还得改许多,就如我!因此将代码从新写一遍。一是为了方便你们也是为了怕忘了,毕竟不经常使用/dom

其中重点是Guid:全局惟一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符。GUID主要用于在拥有多个节点、多台计算机的网络或系统中。在理想状况下,任何计算机和计算机集群都不会生成两个相同的GUID。GUID 的总数达到了2^128(3.4×10^38)个,因此随机生成两个相同GUID的可能性很是小,但并不为0。GUID一词有时也专指微软对UUID标准的实现。测试

在理想状况下,任何计算机和 计算机集群都不会生成两个相同的GUID。 随机生成两个相同GUID的可能性是很是小的,但并不为0。因此,用于生成GUID的算法一般都加入了非随机的参数(如时间),以保证这种重复的状况不会发生。
 1         //声明一个静态整数变量 经过他的改变 测试后感受能够是随机数 再也不紧靠(就是随机数虽然不一样可是 接近)
 2          private static int randomCount = 0;
 3          /// <summary>
 4          /// 利用guid哈希值、当前时间ticks和计数器相乘来计算种子,生成rand变量。
 5          /// </summary>
 6          static float CreateRandomInt()
 7          {
 8              randomCount++;
 9              //s实例化一个Guid类
10              Guid guid = Guid.NewGuid();
11 
12              int key1 = guid.GetHashCode();
13              // 摘要:获取表示此实例的日期和时间的计时周期数。
14              // 返回结果: 表示此实例的日期和时间的计时周期数。该值介于 DateTime.MinValue.Ticks 和 DateTime.MaxValue.Ticks
15              //     之间。
16              int key2 = unchecked((int)DateTime.Now.Ticks);
17 
18              int seed = unchecked(key1 * key2 * randomCount);
19              // 使用指定的种子值初始化 System.Random 类的新实例。
20              //Seed:用来计算伪随机数序列起始值的数字。若是指定的是负数,则使用其绝对值。
21              //这就保证了rand的不一样
22              Random rand = new Random(seed);
23              float newRand = rand.Next(0, 100);
24              return newRand;
25          }
相关文章
相关标签/搜索