Packages

Utilities library for Brazilian Businesses

Current section

Files

Jump to
brazilian_utils lib brazilian_utils.ex
Raw

lib/brazilian_utils.ex

defmodule BrazilianUtils do
@moduledoc """
Utilities library for Brazilian Businesses
"""
@doc ~S"""
Get a list of Brazilian cities given a state's UF.
## Examples
Getting cities from Acre:
iex> BrazilianUtils.get_cities("AC")
["Acrelândia", "Assis Brasil", "Brasiléia", "Bujari", "Capixaba",
"Cruzeiro do Sul", "Epitaciolândia", "Feijó", "Jordão", "Manoel Urbano",
"Marechal Thaumaturgo", "Mâncio Lima", "Plácido de Castro", "Porto Acre",
"Porto Walter", "Rio Branco", "Rodrigues Alves", "Santa Rosa do Purus",
"Sena Madureira", "Senador Guiomard", "Tarauacá", "Xapuri"]
"""
@spec get_cities(String.t()) :: [String.t()]
def get_cities(uf) when is_binary(uf) do
BrazilianUtils.DataSource.get_cities(uf)
end
@doc ~S"""
Get a list with the name and UF of all Brazilian states.
## Examples
iex> BrazilianUtils.get_states()
[
%{code: "AC", name: "Acre"},
%{code: "AL", name: "Alagoas"},
%{code: "AM", name: "Amazonas"},
%{code: "AP", name: "Amapá"},
%{code: "BA", name: "Bahia"},
%{code: "CE", name: "Ceará"},
%{code: "DF", name: "Distrito Federal"},
%{code: "ES", name: "Espírito Santo"},
%{code: "GO", name: "Goiás"},
%{code: "MA", name: "Maranhão"},
%{code: "MG", name: "Minas Gerais"},
%{code: "MS", name: "Mato Grosso do Sul"},
%{code: "MT", name: "Mato Grosso"},
%{code: "PA", name: "Pará"},
%{code: "PB", name: "Paraíba"},
%{code: "PE", name: "Pernambuco"},
%{code: "PI", name: "Piauí"},
%{code: "PR", name: "Paraná"},
%{code: "RJ", name: "Rio de Janeiro"},
%{code: "RN", name: "Rio Grande do Norte"},
%{code: "RO", name: "Rondônia"},
%{code: "RR", name: "Roraima"},
%{code: "RS", name: "Rio Grande do Sul"},
%{code: "SC", name: "Santa Catarina"},
%{code: "SE", name: "Sergipe"},
%{code: "SP", name: "São Paulo"},
%{code: "TO", name: "Tocantins"}
]
"""
@spec get_states() :: [%{code: String.t(), name: String.t()}]
def get_states() do
BrazilianUtils.DataSource.get_states()
end
@doc ~S"""
Check if a given string or number is a valid CEP.
## Examples
iex> BrazilianUtils.is_valid_cep?("77064-620")
true
iex> BrazilianUtils.is_valid_cep?(59014590)
true
iex> BrazilianUtils.is_valid_cep?("12345-6789")
false
iex> BrazilianUtils.is_valid_cep?(1234)
false
"""
@spec is_valid_cep?(String.t() | integer()) :: boolean()
def is_valid_cep?(cep) when is_binary(cep) or is_integer(cep) do
BrazilianUtils.Cep.is_valid?(cep)
end
@doc ~S"""
Check if a given string is a valid CPF.
## Examples
iex> BrazilianUtils.is_valid_cpf?("658.563.984-75")
true
iex> BrazilianUtils.is_valid_cpf?("65856398475")
true
iex> BrazilianUtils.is_valid_cpf?("123.456.789-10")
false
iex> BrazilianUtils.is_valid_cpf?("658.563.984-00")
false
iex> BrazilianUtils.is_valid_cpf?("65856398400")
false
"""
@spec is_valid_cpf?(String.t()) :: boolean()
def is_valid_cpf?(cpf) when is_binary(cpf) do
BrazilianUtils.Cpf.is_valid?(cpf)
end
@doc ~S"""
Check if a given string is a valid brazilian mobile or landline number.
## Examples
iex> BrazilianUtils.is_valid_phone?("(11) 9 0000-0000")
true
iex> BrazilianUtils.is_valid_phone?("11 9 0000 0000")
true
iex> BrazilianUtils.is_valid_phone?("11 3000 0000")
true
iex> BrazilianUtils.is_valid_phone?("00 9 0000 0000")
false
iex> BrazilianUtils.is_valid_phone?("12345")
false
"""
@spec is_valid_phone?(String.t()) :: boolean()
def is_valid_phone?(phone) when is_binary(phone) do
BrazilianUtils.Phone.is_valid?(phone)
end
@doc ~S"""
Check if a given string is a valid brazilian mobile number.
## Examples
iex> BrazilianUtils.is_valid_mobile?("(11) 9 0000-0000")
true
iex> BrazilianUtils.is_valid_mobile?("11 9 0000 0000")
true
iex> BrazilianUtils.is_valid_mobile?("11900000000")
true
iex> BrazilianUtils.is_valid_mobile?("00 9 0000 0000")
false
iex> BrazilianUtils.is_valid_mobile?("11 1 0000 0000")
false
iex> BrazilianUtils.is_valid_mobile?("1234")
false
"""
@spec is_valid_mobile?(String.t()) :: boolean()
def is_valid_mobile?(phone) when is_binary(phone) do
BrazilianUtils.Phone.is_valid_mobile_phone?(phone)
end
@doc ~S"""
Check if a given string is a valid brazilian landline number.
## Examples
iex> BrazilianUtils.is_valid_landline?("(11) 3000-0000")
true
iex> BrazilianUtils.is_valid_landline?("11 3 0000-0000")
true
iex> BrazilianUtils.is_valid_landline?("1130000000")
true
iex> BrazilianUtils.is_valid_landline?("00 3000 0000")
false
iex> BrazilianUtils.is_valid_landline?("11 9 0000 0000")
false
iex> BrazilianUtils.is_valid_landline?("1234")
false
"""
@spec is_valid_landline?(String.t()) :: boolean()
def is_valid_landline?(phone) when is_binary(phone) do
BrazilianUtils.Phone.is_valid_landline_phone?(phone)
end
@doc ~S"""
Format CEP (brazilian postal code)
## Examples
iex> BrazilianUtils.format_cep("92500000")
"92500-000"
iex> BrazilianUtils.format_cep("9250")
"9250"
iex> BrazilianUtils.format_cep("9250000000000")
"92500-000"
iex> BrazilianUtils.format_cep("9250as0d0d00fsa0g0000")
"92500-000"
"""
@spec format_cep(String.t()) :: String.t()
def format_cep(cep) when is_binary(cep) do
BrazilianUtils.Cep.format(cep)
end
@doc ~S"""
Format CPF
## Examples
iex> BrazilianUtils.format_cpf("16561542851")
"165.615.428-51"
iex> BrazilianUtils.format_cpf("165615428")
"165.615.428"
iex> BrazilianUtils.format_cpf("1656154285100000000")
"165.615.428-51"
iex> BrazilianUtils.format_cpf("16sdgs561dsg54!$28sa51")
"165.615.428-51"
"""
@spec format_cpf(String.t()) :: String.t()
def format_cpf(cpf) when is_binary(cpf) do
BrazilianUtils.Cpf.format(cpf)
end
end