Packages

Tax ID Number (NIF) of the individuals/companies of Spanish nationality.

Retired package: Renamed - Renamed package to validate_id (https://hex.pm/packages/validate_id) to avoid confusion with erlang NIFs.

Current section

Files

Jump to
validate_nif lib nif_validator.ex
Raw

lib/nif_validator.ex

defmodule NifValidator do
@moduledoc """
Documentation for NifValidator.
"""
@dni_size 9
@dni_checkcontrol [
"T",
"R",
"W",
"A",
"G",
"M",
"Y",
"F",
"P",
"D",
"X",
"B",
"N",
"J",
"Z",
"S",
"Q",
"V",
"H",
"L",
"C",
"K",
"E"
]
@doc """
## Examples
iex> NifValidator.valid?("123amix")
false
"""
def valid?(nif) when is_list(nif),
do:
nif
|> to_string
|> valid?
def valid?(nif) when byte_size(nif) < @dni_size,
do:
nif
|> String.pad_leading(@dni_size, "0")
|> valid?
def valid?(<<numbers::binary-size(8), letter::binary-size(1)>>) do
numbers
|> Integer.parse()
|> case do
{integer_numbers, ""} ->
String.upcase(letter) == checksum_letter(rem(integer_numbers, 23))
_ ->
false
end
end
def valid?(_), do: false
@dni_checkcontrol
|> Enum.with_index()
|> Enum.map(fn {letter, index} ->
def checksum_letter(unquote(index)), do: unquote(letter)
end)
end