Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 生成一个随机文件密钥_Elixir - Fatal编程技术网

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]
比我上面写的简单代码要多一些