我以前想过一种生成随机数的方法,就是调用句柄,系统分配给程序的句柄,每次调用都不会有重复的,具体做法,呵呵,你们不要笑呀,创建4个按钮数组,数组上限为25000,即一次性load 10万个按钮,而这10万个按钮对应的句柄是不会有重复的,句柄补0补足16位不会有重复的,或者操作一下代码10万次,也不会有重复的 Private Sub Command2_Click() Load Command1(1) MsgBox Command1(1).hWnd Unload Command1(1) End Sub
now()+Int((100000000) * Rnd) 不会有重复的
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保存一下,第二天接着累加,保证不重复
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:
楼上所说的GUID道是不错的选择.
年月日取八位:yyyymmdd
对于16位的数值来说,就还有8位,其最大范围是:0~99999999,然后在此区间取随机数M和N,当 |M-N|>100000时有效,然后在 1 到 |M-N|\100000 之间取随机数作为步长T,然后从M到N之间按步长T取100000个伪随机数,不足8位长度补前导0,最后得到 xxxxxxxx
最终按:yxyxyxyxmxmxdxdx组成的便是一个16位每天都不会重复的伪随机数
Private Sub Command2_Click()
Load Command1(1)
MsgBox Command1(1).hWnd
Unload Command1(1)
End Sub
不会有重复的
Dim i As Integer
For i = 1 To 100000
a = a + Rnd() * 100
Debug.Print Format(a, "000000000000000")
DoEvents
Next循环一次一天的的10万就完成了,完成以后把a保存一下,第二天接着累加,保证不重复
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:
任何试图通过简单运算的随机数生成方法,都使随机性下降。每日生成随机数前,调用:Randomize (Now())