您使用什么模块/库来生成uuid?erlang:uuid生成器
回答
从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].
你为什么要使用round(math:pow(2, 48))
?我认为1 bsl 48
将更快地工作,并且代码不会失去理解。从CouchDB的
我建议使用OSSP的UUID NIF绑定二郎神有钢筋支撑 https://github.com/yrashk/erlang-ossp-uuid
ossp_uuid:make(v4, text)
试试这个:https://github.com/afiskon/erlang-uuid-v4有史以来最简单的实现。
对于像我这样的未来谷歌,erlang-uuid from avtobiff工作非常简单。
我同意你的观点,erlang-uuid的作品很好。 – Elzor 2014-04-06 10:06:54
如果你不需要遵循RFC 4122可以使用now/0
调用不产生外部依赖的唯一ID,因为元组,由现在称之为产生的是虚拟机里面绝对是独一无二的,独特的大概率beetween节点。
我写的一个样式和文档的例子 - 基于我从Erlang列表上的那些足够意义的人们那里得到的zillion建议。
库:https://github.com/zxq9/zuuid
文档:http://zxq9.com/projects/zuuid/docs/
PS:巨大得益于二郎-问题抽空sharpshoot我的一切的时候真棒乡亲。这个lib好得多。
我无法执行v4(): 2> uuid:v4()。 **异常错误:没有函数子句匹配random:统一(281474976710656.0) in函数uuid:v4/0 – 2009-11-01 14:16:55
为您提交了一个错误;-) http://github.com/travis/erlang-uuid/issues/ #issue/1 – 2009-11-01 14:56:56
总而言之,重新计算数学并没有太多意义:pow(2,48)总是可以用16#FFFFFFFFFFFF替换。其他类似。 – Zed 2009-11-01 17:40:52