lib/utils/bacen_id.ex

defmodule StarkInfra.Utils.BacenId do
  def create(bank_code) do
    [bank_code, datetime_to_string(DateTime.utc_now), random_alphanumeric(11)]
    |> Enum.join("")
  end

  defp datetime_to_string(datetime) do
    [datetime.year, datetime.month, datetime.day, datetime.hour, datetime.minute]
    |> Enum.map(&to_string/1)
    |> Enum.map(&String.pad_leading(&1, 2, "0"))
    |> Enum.join("")
  end

  defp random_alphanumeric(length) do
    for _ <- 1..length, into: "", do: << Enum.random('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYZ') >>
  end
end