2017-03-15 2 views

Antwort

2

würde ich eine Binärdatei mit allen möglichen Zeichen erstellen und dann wählen Sie eine der zufällig eine Zufallszahl mit :rand.uniform/1 erzeugt unter Verwendung:

defmodule A do 
    @bytes "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
    def random(length) do 
    for(_ <- 1..length, do: :binary.at(@bytes, :rand.uniform(byte_size(@bytes) - 1))) |> List.to_string 
    end 
end 

for _ <- 1..10 do 
    IO.puts A.random(8) 
end 

Ausgang:

J0C924EG 
N9VOSW2Y 
GRGYHTQH 
I7HMWUCY 
T3GRBSB7 
VT5XU405 
I7ZQNENP 
1KDR9YLG 
JB3BCYWC 
8NZUPXZ1 

Beachten Sie, dass dieser Zufallsausgang ist nicht kryptographisch stark. Die Erlang-Dokumentation empfiehlt, :crypto.strong_rand_bytes/1 dafür zu verwenden, aber die Ausgabe auf [A-Z0-9] abzuschneiden ist etwas mehr Code als der einfache, den ich oben geschrieben habe.

1

Schnell und schmutzig (und wahrscheinlich nicht die beste Lösung der Welt), aber so etwas würde funktionieren.

defmodule RandomKey do 
    @charset Enum.to_list((65..90)) ++ Enum.to_list((1..9)) 

    def generate(size \\ 8) when is_integer(size) do 
    char_list = for _ <- 1..size, do: do_generate() 
    Enum.join(char_list) 
    end 

    defp do_generate do 
    char = Enum.random(@charset) 
    if char > 9 do 
     List.to_string [char] 
    else 
     to_string(char) 
    end 
    end 
end 

RandomKey.generate/1 aufrufe würden Sie einen Standardschlüssel von 8 in der Länge, aber man könnte optional eine andere Größe angeben.

Verwandte Themen