Ich muss einen zufälligen Dateischlüssel generieren. Es muss den folgenden regulären Ausdruck überprüfen:Generieren Sie einen zufälligen Dateischlüssel
Was ist der beste Weg, um eine solche zufällige Zeichenfolge in Elixir zu generieren?
Ich muss einen zufälligen Dateischlüssel generieren. Es muss den folgenden regulären Ausdruck überprüfen:Generieren Sie einen zufälligen Dateischlüssel
Was ist der beste Weg, um eine solche zufällige Zeichenfolge in Elixir zu generieren?
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.
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.