View Source EctoCommons.SocialSecurityValidator (Ecto Commons v0.3.6)

This ecto validator checks the provided value is a valid social security number for a given country

Example:

iex> types = %{admin_id: :string}
iex> params = %{admin_id: "188037424305025"}
iex> Ecto.Changeset.cast({%{}, types}, params, Map.keys(types))
...> |> validate_social_security(:admin_id, country: "fr")
#Ecto.Changeset<action: nil, changes: %{admin_id: "188037424305025"}, errors: [], data: %{}, valid?: true>

# Also works for temporary french social security numbers and special edge cases (corsica)
iex> types = %{admin_id: :string}
iex> params = %{admin_id: "7 56 50 2B 233 042 82"}
iex> Ecto.Changeset.cast({%{}, types}, params, Map.keys(types))
...> |> validate_social_security(:admin_id, country: "fr")
#Ecto.Changeset<action: nil, changes: %{admin_id: "7 56 50 2B 233 042 82"}, errors: [], data: %{}, valid?: true>

iex> types = %{admin_id: :string}
iex> params = %{admin_id: "8 12 50 97 307 437 59"}
iex> Ecto.Changeset.cast({%{}, types}, params, Map.keys(types))
...> |> validate_social_security(:admin_id, country: "fr")
#Ecto.Changeset<action: nil, changes: %{admin_id: "8 12 50 97 307 437 59"}, errors: [], data: %{}, valid?: true>

iex> types = %{admin_id: :string}
iex> params = %{admin_id: "1 88 03 74 243 050 57"}
iex> Ecto.Changeset.cast({%{}, types}, params, Map.keys(types))
...> |> validate_social_security(:admin_id, country: "fr")
#Ecto.Changeset<action: nil, changes: %{admin_id: "1 88 03 74 243 050 57"}, errors: [admin_id: {"is not a valid social security number", [validation: :social_security]}], data: %{}, valid?: false>

iex> types = %{admin_id: :string}
iex> params = %{admin_id: "this is an incorrect value"}
iex> Ecto.Changeset.cast({%{}, types}, params, Map.keys(types))
...> |> validate_social_security(:admin_id, country: "fr")
#Ecto.Changeset<action: nil, changes: %{admin_id: "this is an incorrect value"}, errors: [admin_id: {"is not a valid social security number", [validation: :social_security]}], data: %{}, valid?: false>

Summary

Functions

Link to this function

checksum(number, country_isoalpha2)

View Source
@spec checksum(binary(), String.t()) :: integer()
@spec checksum(integer(), String.t()) :: integer()
Link to this function

split_checksum(number, country_isoalpha2)

View Source
Link to this function

valid?(number, country_isoalpha2)

View Source
@spec valid?(number :: integer() | String.t(), country_isoalpha2 :: String.t()) ::
  boolean()
Link to this function

validate_social_security(changeset, field, opts \\ [])

View Source