可以用LuaJIT里的FFI模块调用系统的uuid模块。
1. 首先安装uuid模块(ubuntu/debian请安装:sudo apt-get install uuid uuid-dev两个模块)
2. FFI调用
代码示例:
local ffi = require 'ffi'
ffi.cdef[[
typedef unsigned char uuid_t[16];
void uuid_generate(uuid_t out);
void uuid_unparse(const uuid_t uu, char *out);
]]
local uuid = ffi.load('libuuid')
if uuid then
local uuid_t = ffi.new("uuid_t")
local uuid_out = ffi.new("char[64]")
uuid.uuid_generate(uuid_t)
uuid.uuid_unparse(uuid_t, uuid_out)
result = ffi.string(uuid_out)
print(result)
end
b9b070f2-31ab-4ea3-82f9-158a18e3b41a
测试环境:Ubuntu 10.10、LuaJIT-2.0.0-beta11
--
2012/10/18 王曦
<wang...@gmail.com>
ngx_lua模块没有提供直接生成UUID的API,目前想到的生成方法有2个:(1) 使用lua-resty-string库提供的随机数接口生成16个字节的随机数,然后格式化为UUID
(2) 使用math.random封装一个函数,生成0-65535之间的随机数并格式化为4位16进制数,然后调用5次该函数生成UUID
这2种方法生成的UUID的唯一性取决于随机数发生器的质量,lua-resty-string库的随机数接口是对OpenSSL库的封装,貌似要更好一些
请问大家在项目中有没有用到过UUID?有没有其它更好的方法来生成UUID?谢谢