即使使用randomseed,Lua(Lapis)随机值也会返回相同的结果

时间:2014-11-15 19:40:33

标签: lua

首先,我使用它:

math.randomseed(os.time())

此功能可以检查:

function makeString(l)
        if l < 1 then return nil end
        local s = "" 
        for i = 0, l do
            n = math.random(0, 61)--61
            n0 = 0
            if n < 10 then n0 = n + 48
            elseif n < 36 then n0 = n - 10 + 65
            else n0 = n - 36 + 97 end
                s = s .. string.char(n0) 
        end
        return s
end

如果我使用此功能:

app:match("/tttt", function()
  local ss = ""
   for i=1,10 do ss = ss .. makeString(30) .. "\n" end
  return ss
end)

我收到了不同的价值观。

如果我使用它:

app:match("/ttt", function()
  return makeString(30)
end)

和JavaScript jQuery, :

  $("#button5").click(function(){
   var ss = ""
   for(var i = 0; i < 10; i++)
    {
        $("#div1").load("/ttt", function() {
        ss = ss + $(this).text()
  alert(ss);
});
    }
    $("#div1").text(ss);
  });

我每隔一秒收到相同的随机字符串。 怎么解决?我尝试使用不同的随机数据创建数据库,但我收到相同的字符串!这只是我写的例子,但填写数据库会得到相同的结果!@#%%

有任何想法要解决它吗?

1 个答案:

答案 0 :(得分:0)

我发现这是&#34;功能&#34;使用秒来生成随机的lua。使用此链接阅读更多内容:http://lua-users.org/wiki/MathLibraryTutorial

但是可以提供帮助的解决方案是用户/ dev / urandom

描述的链接: http://lua-users.org/lists/lua-l/2008-05/msg00498.html

在我的案例中:

local frandom = io.open("/dev/urandom", "rb")
local makeString
makeString = function(l)

        local d = frandom:read(4)
        math.randomseed(d:byte(1) + (d:byte(2) * 256) + (d:byte(3) * 65536) + (d:byte(4) * 4294967296))

        if l < 1 then return nil end
        local s = "" 
        for i = 0, l do
            local n = math.random(0, 61)
            n0 = 0
            if n < 10 then n0 = n + 48
            elseif n < 36 then n0 = n - 10 + 65
            else n0 = n - 36 + 97 end
                s = s .. string.char(n0)
        end
        return s
end