zoukankan      html  css  js  c++  java
  • C#利用Guid实现真随机数

    C#中的随机数可以利用Random类很简单地生成随机数,代码如下:

    Random rdmNum=new Random();//生成随机数对象
    int ans=rdmNum.Next(a,b);//生成大于大于a小于b的随机数(int)型

    但是在不指定种子时,默认的种子是系统时间。这样的设置对于一般的随机数生成过程是没有问题的,但是对于一些快速、大量生成随机数的问题(尤其创建与利用循环批量生成随机数时),会出现由于运算速度太快导致在一个相同或者相近的系统时间内生成多个随机数的情况,此时生成的这些随机数都是相同的,显然是不符合现实情况要求的。

    这种问题可以借助GUID(全局唯一标识符)来解决:

     全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符。GUID主要用于在拥有多个节点、多台计算机的网络或系统中。在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。GUID 的总数达到了2^128(3.4×10^38)个,所以随机生成两个相同GUID的可能性非常小,但并不为0。GUID一词有时也专指微软对UUID标准的实现。
    在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。随机生成两个相同GUID的可能性是非常小的,但并不为0。所以,用于生成GUID的算法通常都加入了非随机的参数(如时间),以保证这种重复的情况不会发生。
    在 Windows 平台上,GUID 广泛应用于微软的产品中,用于标识如注册表项、类及接口标识、数据库、系统目录等对象。
    格式
    GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个4位十六进制数。例如:6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的 GUID 值。
     

    GUID特点

    ★需要GUID的时候,可以完全由算法自动生成,不需要一个权威机构来管理。
    ★GUID理论上能产生全球唯一的值,对于以后的数据导入很方便。
     
    利用GUID生成随机数的代码:
     byte[] buffer = Guid.NewGuid().ToByteArray();//生成字节数组
      int iRoot = BitConverter.ToInt32(buffer, 0);//利用BitConvert方法把字节数组转换为整数
      Random rdmNum = new Random(iRoot);//以这个生成的整数为种子

    这样,生成的随机数就是完全随机、不重复的了

  • 相关阅读:
    HDU 5744
    HDU 5815
    POJ 1269
    HDU 5742
    HDU 4609
    fzu 1150 Farmer Bill's Problem
    fzu 1002 HangOver
    fzu 1001 Duplicate Pair
    fzu 1150 Farmer Bill's Problem
    fzu 1182 Argus 优先队列
  • 原文地址:https://www.cnblogs.com/jiading/p/9902835.html
Copyright © 2011-2022 走看看