erlang:uuid发电机

时间:2009-11-01 13:49:42

标签: erlang

您使用什么模块/库来生成uuid?

9 个答案:

答案 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)

答案 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().