您使用什么模块/库来生成uuid?
答案 0 :(得分:6)
对于像我这样的未来的google,erlang-uuid from avtobiff非常简单。
答案 1 :(得分:5)
来自http://github.com/travis/erlang-uuid
-module(uuid).
-export([v4/0, to_string/1, get_parts/1]).
-import(random).
v4() ->
v4(random:uniform(math:pow(2, 48)) - 1, random:uniform(math:pow(2, 12)) - 1, random:uniform(math:pow(2, 32)) - 1, random:uniform(math:pow(2, 30)) - 1).
v4(R1, R2, R3, R4) ->
<<R1:48, 4:4, R2:12, 2:2, R3:32, R4: 30>>.
to_string(U) ->
lists:flatten(io_lib:format("~8.16.0b-~4.16.0b-~4.16.0b-~2.16.0b~2.16.0b-~12.16.0b", get_parts(U))).
get_parts(<<TL:32, TM:16, THV:16, CSR:8, CSL:8, N:48>>) ->
[TL, TM, THV, CSR, CSL, N].
答案 2 :(得分:4)
来自couchdb的Uuid生成器: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_uuids.erl
答案 3 :(得分:3)
我建议对具有钢筋支持的Erlang使用ossp-uuid nif绑定 https://github.com/yrashk/erlang-ossp-uuid
ossp_uuid:make(v4, text)
答案 4 :(得分:2)
为什么使用round(math:pow(2, 48))
?我认为1 bsl 48
可以更快地运作,代码也不会失去理解。
答案 5 :(得分:1)
试试这个:https://github.com/afiskon/erlang-uuid-v4最简单的实现。
答案 6 :(得分:1)
如果您不需要关注RFC 4122,则可以使用now/0
调用生成唯一ID,而无需外部依赖关系,因为现在调用生成的元组在VM内部是绝对唯一的,并且是唯一的大型节点之间的概率。
答案 7 :(得分:1)
我写的那个作为风格和文档的例子 - 基于我从Erlang列表上那些足够多的人那里收到的众多建议。
图书馆:https://gitlab.com/zxq9/zuuid
文档:http://zxq9.com/projects/zuuid/docs/
PS:巨大的感谢那些令人敬畏的erlang问题的人们花时间在一切事情上突然出现。 lib对它来说要好得多。
答案 8 :(得分:1)
此代码生成 V4 UUID 代码
-module(uuid).
-export([uuid_v4/0]).
-define(VARIANT10, 2#10).
-define(UUIDv4, 4).
uuid_v4() ->
<<U0:32, U1:16, _:4, U2:12, _:2, U3:30, U4:32>> = crypto:strong_rand_bytes(16),
lists:flatten(io_lib:format("~8.16.0b-~4.16.0b-~4.16.0b-~2.16.0b~2.16.0b-~12.16.0b",get_binary_uuid(<<U0:32, U1:16, ?UUIDv4:4, U2:12, ?VARIANT10:2, U3:30, U4:32>>))).
get_binary_uuid(<<TL:32, TM:16, THV:16, CSR:8, CSL:8, N:48>>) ->
[TL, TM, THV, CSR, CSL, N].
对于编译运行:c(uuid).
对于运行代码:uuid:uuid_v4().