util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
authorWaqas Hussain <waqas20@gmail.com>
Thu, 4 Jun 2009 13:04:26 +0000 (18:04 +0500)
committerWaqas Hussain <waqas20@gmail.com>
Thu, 4 Jun 2009 13:04:26 +0000 (18:04 +0500)
util/uuid.lua

index e928259d617f9872222193869580ff2858895673..a6dc0a1e8f575be59fc775b934d4873aa5bdbf1b 100644 (file)
@@ -27,8 +27,22 @@ local function new_random(x)
        return sha1(x..os_clock()..tostring({}), true);
 end
 
+local buffer = new_random(uniq_time());
+local function get_nibbles(n)
+       if #buffer < n then
+               buffer = new_random(buffer..uniq_time());
+       end
+       local r = buffer:sub(0, n);
+       buffer = buffer:sub(n+1);
+       return r;
+end
+local function get_twobits()
+       return ("%x"):format(get_nibbles(1):byte() % 4 + 8);
+end
+
 function generate()
-       return new_random(uniq_time());
+       -- generate RFC 4122 complaint UUIDs (version 4 - random)
+       return get_nibbles(8).."-"..get_nibbles(4).."-4"..get_nibbles(3).."-"..(get_twobits())..get_nibbles(3).."-"..get_nibbles(12);
 end
 
 return _M;