使用 lua 生成一个32位的随机数,请建议一些方法

我希望生成一个包含字母数字的32位密钥,并且它们应该是唯一的。请建议一种方法。

我已经使用了 math.random 函数,但是我一遍又一遍地得到相同的随机数,我希望它是唯一的。

点赞
用户2858170
用户2858170

如果你想要一个唯一的数字,你必须要有一个已用数字列表。否则,你就会有再次获取已用数字的机会。尽管用 32 位数字是相当不可能的。

你显然没有阅读 math.random 的文档: http://www.lua.org/manual/5.3/manual.html#pdf-math.random

否则,你就应该知道除非你使用 math.randomseed 改变种子值,否则 math.random 总是会给你相同的伪随机数。

在使用函数之前,请确保阅读相应的文档。

2016-06-02 12:07:01
用户107090
用户107090

下面这个轻松的程序生成1000个随机的32位键值,无重复无浪费:

M=2^32-1
R={}
N=1000
n=0

for i=1,N do
    local x=math.random(M)
    if R[x]==nil then n=n+1 R[x]=n print(n,i,n==i,x) end
end

关键点在于 M 非常大,即使我们将 N 增加到一百万,重复的可能性也非常小。

2016-06-02 16:37:32