Current section

Files

Jump to
bali lib validators italy.ex
Raw

lib/validators/italy.ex

defmodule Validators.Italy do
@moduledoc """
Validador para los identificadores personales y fiscales de Italia.
Soporta el NIF (Número de identificación fiscal)
"""
@doc """
Valida el formato del NIF
## Ejemplos:
```elixir
iex> Validators.Italy.validate(:nif, "VRDGPP13R10B293P")
{:ok, "VRDGPP13R10B293P"}
iex> Validators.Italy.validate(:nif, "VRDGPP13R10B29BP")
{:error, "NIF inválido"}
```
"""
@spec valid(atom, String.t()) :: {:ok, String.t()} | {:error, String.t()}
def valid(:nif, value) do
if Regex.match?(nif(), value) do
{:ok, value}
else
{:error, "NIF inválido"}
end
end
def valid(_, _) do
{:error, "Tipo de documento inválido"}
end
# Expresión regular para validar el NIF
# Su estructura es la siguiente:
# - Se utilizan las tres primeras consonantes del apellido
# - Se utilizan las tres primeras consonantes del nombre
# - Año de nacimiento (dos dígitos)
# - Mes de nacimiento (una letra)
# - Cumpleaños y sexo (2 dígitos)
# - Ciudad de nacimiento (4 caracteres alfanuméricos)
# - Caracter de control (una letra)
@spec nif() :: Regex.t()
defp nif do
~r/^([A-Z]{6}[0-9LMNPQRSTUV]{2}[ABCDEHLMPRST]{1}[0-9LMNPQRSTUV]{2}[A-Z]{1}[0-9LMNPQRSTUV]{3}[A-Z]{1})$|([0-9]{11})$/
end
end