I am trying to generate a random enough number quickly.
Right Now I am using the following:
uniqueID() -> C = random:uniform(9999) , %%%DO SPEED TEST
random:seed(C,random:uniform(99),random:uniform(99)),
{_, {H, Min, S}} = calendar:universal_time(),
{A, B} = statistics(wall_clock),
(A*B) +((H + C + Min) * S).
It takes too long compared to something like make_ref().
6> make_ref().
#Ref<0.0.0.74>
How can I take the unique ref and parse it to become an integer?
such as 00074
Thanks for the help.
Are you really sure you want to use
erlang:make_ref/0for unique numbers? Refs are only unique for one launch of one erlang vm – they are repeatable, predictable, and make lousy unique identifiers if you plan to use them for anything other than tags in erlang messages to match up requests and replies.You could do it by formatting the ref as a string (
erlang:ref_to_list/1) and then parsing that.However, I think the best idea would be to use
crypto:rand_bytes/1to get yourself anNbyte binary of random bytes, orcrypto:rand_uniform/2if you need a random integer in some range. This method at least gives you some guarantees as to the quality of the random integers you produce (see the openssl rand_bytes documentation).