Elixir 生成一个随机文件密钥
我需要生成一个随机文件密钥。它必须验证以下正则表达式:Elixir 生成一个随机文件密钥,elixir,Elixir,我需要生成一个随机文件密钥。它必须验证以下正则表达式: ~r/[A-Z0-9]{8}/ 在Elixir中生成这样一个随机字符串的最佳方法是什么?又快又脏(可能不是世界上最好的解决方案),但类似的方法也可以 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
~r/[A-Z0-9]{8}/
在Elixir中生成这样一个随机字符串的最佳方法是什么?又快又脏(可能不是世界上最好的解决方案),但类似的方法也可以
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
defmodule随机键do
@字符集枚举到_列表((65..90))++枚举到_列表((1..9))
def生成(大小\\8)的时间为_整数(大小)do
char_list=for u9 do
List.to_字符串[char]
其他的
to_字符串(字符)
结束
结束
结束
调用RandomKey.generate/1
将为您提供长度为8的默认键,但您可以选择指定不同的大小。快速且不干净(可能不是世界上最好的解决方案),但类似的方法可以工作
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
defmodule随机键do
@字符集枚举到_列表((65..90))++枚举到_列表((1..9))
def生成(大小\\8)的时间为_整数(大小)do
char_list=for u9 do
List.to_字符串[char]
其他的
to_字符串(字符)
结束
结束
结束
调用
RandomKey.generate/1
将为您提供长度为8的默认键,但您可以选择指定不同的大小。我将创建一个包含所有可能字符的二进制文件,然后使用使用:rand.uniform/1
生成的随机整数随机选择其中一个:
defmodule A do
@bytes "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
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
请注意,此随机输出在加密方面不强。Erlang文档建议对此使用
:crypto.strong\u rand\u bytes/1
,但将其输出截断为[A-Z0-9]
比我上面写的简单代码多一点。我将创建一个包含所有可能字符的二进制文件,然后使用使用:rand.uniform/1生成的随机整数随机选择其中一个:
defmodule A do
@bytes "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
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
请注意,此随机输出在加密方面不强。Erlang文档建议使用:crypto.strong\u rand\u bytes/1
,但将其输出截断为[A-Z0-9]
比我上面写的简单代码要多一些