您使用什麼模塊/庫來生成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