16

Erlang でランダムな英数字 ID を生成しようとしています。私は素朴crypto:strong_rand_bytes(Bytes)にランダムなバイナリを生成しようとしましたが、そのバイナリを使用して作成されたように使用しました<<"my_unique_random_id">>.

ええと、erlang のドキュメントや他の場所で他のオプションを探しましたが、何も見つかりませんでした。誰かが私に解決策を教えてもらえますか?

4

6 に答える 6

18

それはあなたが必要とするランダム性に依存するかもしれません。Erlangのcryptoモジュールは、モジュールよりも強力なランダムデータを生成しrandomます([erlang-questions]Yawsセキュリティアラート-Yaws1.93およびこの質問も参照してください)。IDの生成に使用strong_rand_bytesする場合は、そのbase64を取得するだけで十分な場合があります。

> base64:encode(crypto:strong_rand_bytes(Bytes)).

必要に応じて、これをリストに変えることができます。

于 2012-10-09T07:35:28.123 に答える
12

Erlang でランダムな文字列を生成するによれば、特定の文字セットから指定された長さの文字列を生成するのに、Erlang の数行しかかかりません。

get_random_string(Length, AllowedChars) ->
    lists:foldl(fun(_, Acc) ->
                        [lists:nth(random:uniform(length(AllowedChars)),
                                   AllowedChars)]
                            ++ Acc
                end, [], lists:seq(1, Length)).

ブログ投稿には、コードの行ごとの説明があります。いくつかの最適化のヒントについては、コメントを参照してください。

于 2012-10-08T20:20:52.447 に答える
1
randchar(N) ->
   randchar(N, []).

randchar(0, Acc) ->
   Acc;
randchar(N, Acc) ->
   randchar(N - 1, [random:uniform(26) + 96 | Acc]).
于 2012-10-17T04:50:23.003 に答える