Module:TwitterSnowflake/gen: Difference between revisions
Appearance
Content deleted Content added
mNo edit summary |
update function |
||
Line 13: | Line 13: | ||
function p.getSnowflake() |
function p.getSnowflake() |
||
local sequence = "000000000000" -- 12 sequence bits |
local sequence = "000000000000" -- 12 sequence bits |
||
local shard = " |
local shard = "0000000000" -- 10 shard bits |
||
local epoch = 1288834974 |
local epoch = 1288834974 |
||
local time = os.time() |
local time = os.time() |
||
local timestamp = time - epoch |
local timestamp = time - epoch |
||
local timestampbinary = numberToBinStr(timestamp |
local timestampbinary = numberToBinStr(timestamp..math.random(0,9)..math.random(0,9)..math.random(0,9)) -- lua only provides time, so we append three random digits as "milliseconds" |
||
local snowflakebinary = timestampbinary .. shard .. sequence |
local snowflakebinary = timestampbinary .. shard .. sequence |
||
return string.format("%18.0f",tonumber(snowflakebinary,2)) |
return string.format("%18.0f",tonumber(snowflakebinary,2)) |
Latest revision as of 19:37, 20 January 2021
Usage
[edit]This generates a Snowflake ID of the current time, based off of Twitter's epoch.
Current ID: 1928522584039620608 (
)See also
[edit]
local p = {}
local function numberToBinStr(x)
ret=""
while x~=1 and x~=0 do
ret=tostring(x%2)..ret
x=math.modf(x/2)
end
ret=tostring(x)..ret
return ret
end
function p.getSnowflake()
local sequence = "000000000000" -- 12 sequence bits
local shard = "0000000000" -- 10 shard bits
local epoch = 1288834974
local time = os.time()
local timestamp = time - epoch
local timestampbinary = numberToBinStr(timestamp..math.random(0,9)..math.random(0,9)..math.random(0,9)) -- lua only provides time, so we append three random digits as "milliseconds"
local snowflakebinary = timestampbinary .. shard .. sequence
return string.format("%18.0f",tonumber(snowflakebinary,2))
end
return p