util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)

Thu, 04 Jun 2009 18:04:26 +0500

author
Waqas Hussain <waqas20@gmail.com>
date
Thu, 04 Jun 2009 18:04:26 +0500
changeset 1303
2170e2c0d57a
parent 1302
4561c6d95339
child 1304
0a49759464e0

util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)

util/uuid.lua file | annotate | diff | comparison | revisions
--- a/util/uuid.lua	Thu Jun 04 17:41:55 2009 +0500
+++ b/util/uuid.lua	Thu Jun 04 18:04:26 2009 +0500
@@ -27,8 +27,22 @@
 	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;

mercurial