Guid
主要能夠產生唯一碼 的原因就是樣本數夠大
有 2^128 種可能
在真正隨機產生亂數的情況下
幾乎不可能產生同樣的編碼
程式碼:
---------------------
--產生GUID
--範例:
--[[
local guid = require( "Tool.Guid")
print("guid.NewHex" , guid.NewHex())
print("guid.NewLong" , guid.NewLong())
]]--
---------------------
local M = {}
--樣本數為 2^128
function M.NewHex()
--隨機種子
local d = io.open("/dev/urandom", "r"):read(4)
local template ="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
math.randomseed(os.time() + d:byte(1) + (d:byte(2) * 256) + (d:byte(3) * 65536) + (d:byte(4) * 4294967296))
return string.upper(string.gsub(template, "x",
function (c)
local v = (c == "x") and math.random(0, 0xf) or math.random(8, 0xb)
return string.format("%x", v)
end))
end
--樣本數為 2147483647
function M.NewLong()
--隨機種子
local d = io.open("/dev/urandom", "r"):read(4)
math.randomseed(os.time() + d:byte(1) + (d:byte(2) * 256) + (d:byte(3) * 65536) + (d:byte(4) * 4294967296))
return math.random( 1 , 2147483647 )
end
return M
好猛喔,學習了
回覆刪除