Current section
Files
Jump to
Current section
Files
lib/luhn.ex
defmodule Luhn do
require Integer
def valid?(number) do
checksum(number)
|> Kernel.== 0
end
def checksum(number) when is_integer(number) do
Integer.to_string(number) |> checksum
end
def checksum(number) do
String.split(number, "", trim: true)
|> Enum.reduce([], fn(n, acc) -> [String.to_integer(n)|acc] end)
|> double
|> rem 10
end
defp double([]), do: 0
defp double([x]), do: x
defp double([x,y|tail]), do: x + sum(y * 2) + double(tail)
defp sum(number) when number >= 10, do: number - 9
defp sum(number), do: number
end