每天需要生成10万 16位的随机数,全由数字组成,每天生成的以及与之前的都不能重复,求思路!我的想法是用时间+随机数组成16位,(前提时间肯定不能改)不知是否可行,理论上是否肯定与以前的不会重复??

解决方案 »

  1.   

    简单的随机与时间结合使用频率还是很多的,比如流水号之类的东西.
    楼上所说的GUID道是不错的选择.
      

  2.   

    不知道楼主能否参考 http://topic.csdn.net/u/20090504/10/15251f43-1ab3-4782-bdbd-b79f327eb38d_2.html
      

  3.   

    提供一个最为简单的伪随机数处理方法:
    年月日取八位:yyyymmdd
    对于16位的数值来说,就还有8位,其最大范围是:0~99999999,然后在此区间取随机数M和N,当 |M-N|>100000时有效,然后在 1 到 |M-N|\100000 之间取随机数作为步长T,然后从M到N之间按步长T取100000个伪随机数,不足8位长度补前导0,最后得到 xxxxxxxx
    最终按:yxyxyxyxmxmxdxdx组成的便是一个16位每天都不会重复的伪随机数
      

  4.   

    用时间就可以了, YYYYMMDDhhmmss 年月日时分秒才用掉12位, 毫秒有3位,取两位, 一共16位,应该够了
      

  5.   

    我以前想过一种生成随机数的方法,就是调用句柄,系统分配给程序的句柄,每次调用都不会有重复的,具体做法,呵呵,你们不要笑呀,创建4个按钮数组,数组上限为25000,即一次性load 10万个按钮,而这10万个按钮对应的句柄是不会有重复的,句柄补0补足16位不会有重复的,或者操作一下代码10万次,也不会有重复的
    Private Sub Command2_Click()
      Load Command1(1)
      MsgBox Command1(1).hWnd
      Unload Command1(1)
    End Sub
      

  6.   

    now()+Int((100000000) * Rnd)
    不会有重复的
      

  7.   

    Dim a As Currency
    Dim i As Integer
    For i = 1 To 100000
        a = a + Rnd() * 100
        Debug.Print Format(a, "000000000000000")
        DoEvents
    Next循环一次一天的的10万就完成了,完成以后把a保存一下,第二天接着累加,保证不重复
      

  8.   


    The Rnd function returns a value less than 1 but greater than or equal to 0. The value of number determines how Rnd generates a random number:
      

  9.   


    任何试图通过简单运算的随机数生成方法,都使随机性下降。每日生成随机数前,调用:Randomize (Now())