Packages
bran_checker
0.1.0
Elixir package to validate bank account numbers of Brazilian banks.
Retired package: Security issue - Not published by owners
Current section
Files
Jump to
Current section
Files
lib/digit_calculator.ex
defmodule BRAN.DigitCalculator do
@moduledoc """
Documentation for `BRAN.DigitCalculator`.
"""
@spec calc_numbers([Integer.t()], [Integer.t()], Boolean.t()) :: Integer.t()
def calc_numbers(account_number, weights, sum_result_when_greater_than_9 \\ false) do
account_number
|> Enum.zip(weights)
|> Enum.map(&calc_number_pair(&1, sum_result_when_greater_than_9))
|> Enum.sum()
end
defp calc_number_pair(numbers, sum_result_when_greater_than_9) do
result = elem(numbers, 0) * elem(numbers, 1)
sum_result(result, sum_result_when_greater_than_9)
end
defp sum_result(result, sum_result_when_greater_than_9) when sum_result_when_greater_than_9 do
result
|> Integer.digits()
|> Enum.sum()
end
defp sum_result(result, _sum_result_when_greater_than_9), do: result
@spec mod([Integer.t()], Integer.t(), [Integer.t()], Boolean.t()) :: Integer.t()
def mod(full_account_number, mod_factor, weights, sum_result_when_greater_than_9 \\ false),
do:
mod_factor -
rem(
calc_numbers(full_account_number, weights, sum_result_when_greater_than_9),
mod_factor
)
end