Packages

Utils library for specific Brazilian businesses

Current section

Files

Jump to
brutils src brutils.erl
Raw

src/brutils.erl

%% @doc Utils library for Brazilian-specific businesses.
%%
%% This module is the flat facade of the library: it re-exports the
%% domain modules' functions under suffixed names (for example
%% `is_valid_cpf/1' delegating to {@link brutils_cpf:is_valid/1}) so
%% callers can depend on a single module.
-module(brutils).
%% CPF
-export([is_valid_cpf/1, format_cpf/1, remove_symbols_cpf/1, generate_cpf/0]).
%% CNPJ
-export([is_valid_cnpj/1, format_cnpj/1, remove_symbols_cnpj/1,
generate_cnpj/0, generate_cnpj/1, generate_cnpj/2]).
%% PIS
-export([is_valid_pis/1, format_pis/1, remove_symbols_pis/1, generate_pis/0]).
%% CNH
-export([is_valid_cnh/1]).
%% RENAVAM
-export([is_valid_renavam/1]).
%% CEP
-export([is_valid_cep/1, format_cep/1, remove_symbols_cep/1, generate_cep/0]).
%% Phone
-export([is_valid_phone/1, is_valid_phone/2, format_phone/1,
remove_symbols_phone/1, remove_international_dialing_code/1,
generate_phone/0, generate_phone/1]).
%% Passport
-export([is_valid_passport/1, format_passport/1, remove_symbols_passport/1,
generate_passport/0]).
%% License plate
-export([is_valid_license_plate/1, is_valid_license_plate/2,
format_license_plate/1, remove_symbols_license_plate/1,
convert_license_plate_to_mercosul/1, get_format_license_plate/1,
generate_license_plate/0, generate_license_plate/1]).
%% Voter ID
-export([is_valid_voter_id/1, format_voter_id/1,
generate_voter_id/0, generate_voter_id/1]).
%%--------------------------------------------------------------------
%% CPF
%%--------------------------------------------------------------------
%% @doc Returns whether the given term is a valid CPF.
%% @see brutils_cpf:is_valid/1
-spec is_valid_cpf(term()) -> boolean().
is_valid_cpf(Cpf) ->
brutils_cpf:is_valid(Cpf).
%% @doc Formats a valid CPF for display (`<<"XXX.XXX.XXX-XX">>').
%% @see brutils_cpf:format/1
-spec format_cpf(binary()) ->
{ok, brutils_cpf:formatted_cpf()} | {error, invalid}.
format_cpf(Cpf) ->
brutils_cpf:format(Cpf).
%% @doc Removes the formatting symbols `.' and `-' from a CPF string.
%% @see brutils_cpf:remove_symbols/1
-spec remove_symbols_cpf(binary()) -> binary().
remove_symbols_cpf(Cpf) ->
brutils_cpf:remove_symbols(Cpf).
%% @doc Generates a random valid CPF.
%% @see brutils_cpf:generate/0
-spec generate_cpf() -> brutils_cpf:cpf().
generate_cpf() ->
brutils_cpf:generate().
%%--------------------------------------------------------------------
%% CNPJ
%%--------------------------------------------------------------------
%% @doc Returns whether the given term is a valid CNPJ.
%% @see brutils_cnpj:is_valid/1
-spec is_valid_cnpj(term()) -> boolean().
is_valid_cnpj(Cnpj) ->
brutils_cnpj:is_valid(Cnpj).
%% @doc Formats a valid CNPJ for display (`<<"XX.XXX.XXX/XXXX-XX">>').
%% @see brutils_cnpj:format/1
-spec format_cnpj(binary()) ->
{ok, brutils_cnpj:formatted_cnpj()} | {error, invalid}.
format_cnpj(Cnpj) ->
brutils_cnpj:format(Cnpj).
%% @doc Removes the formatting symbols `.', `/' and `-' from a CNPJ
%% string.
%% @see brutils_cnpj:remove_symbols/1
-spec remove_symbols_cnpj(binary()) -> binary().
remove_symbols_cnpj(Cnpj) ->
brutils_cnpj:remove_symbols(Cnpj).
%% @doc Generates a random valid CNPJ with branch number `0001'.
%% @see brutils_cnpj:generate/0
-spec generate_cnpj() -> brutils_cnpj:cnpj().
generate_cnpj() ->
brutils_cnpj:generate().
%% @doc Generates a random valid CNPJ with the given branch number.
%% @see brutils_cnpj:generate/1
-spec generate_cnpj(Branch :: non_neg_integer() | binary()) ->
brutils_cnpj:cnpj().
generate_cnpj(Branch) ->
brutils_cnpj:generate(Branch).
%% @doc Generates a random valid CNPJ, optionally alphanumeric.
%% @see brutils_cnpj:generate/2
-spec generate_cnpj(Branch :: non_neg_integer() | binary(),
Alphanumeric :: boolean()) -> brutils_cnpj:cnpj().
generate_cnpj(Branch, Alphanumeric) ->
brutils_cnpj:generate(Branch, Alphanumeric).
%%--------------------------------------------------------------------
%% PIS
%%--------------------------------------------------------------------
%% @doc Returns whether the given term is a valid PIS.
%% @see brutils_pis:is_valid/1
-spec is_valid_pis(term()) -> boolean().
is_valid_pis(Pis) ->
brutils_pis:is_valid(Pis).
%% @doc Formats a valid PIS for display (`<<"NNN.NNNNN.NN-N">>').
%% @see brutils_pis:format/1
-spec format_pis(binary()) ->
{ok, brutils_pis:formatted_pis()} | {error, invalid}.
format_pis(Pis) ->
brutils_pis:format(Pis).
%% @doc Removes the formatting symbols `.' and `-' from a PIS string.
%% @see brutils_pis:remove_symbols/1
-spec remove_symbols_pis(binary()) -> binary().
remove_symbols_pis(Pis) ->
brutils_pis:remove_symbols(Pis).
%% @doc Generates a random valid PIS.
%% @see brutils_pis:generate/0
-spec generate_pis() -> brutils_pis:pis().
generate_pis() ->
brutils_pis:generate().
%%--------------------------------------------------------------------
%% CNH
%%--------------------------------------------------------------------
%% @doc Returns whether the given term is a valid CNH (2022 layout).
%% Non-digit characters are stripped before validation.
%% @see brutils_cnh:is_valid/1
-spec is_valid_cnh(term()) -> boolean().
is_valid_cnh(Cnh) ->
brutils_cnh:is_valid(Cnh).
%%--------------------------------------------------------------------
%% RENAVAM
%%--------------------------------------------------------------------
%% @doc Returns whether the given term is a valid RENAVAM.
%% Symbols are not stripped: the input must be digits only.
%% @see brutils_renavam:is_valid/1
-spec is_valid_renavam(term()) -> boolean().
is_valid_renavam(Renavam) ->
brutils_renavam:is_valid(Renavam).
%%--------------------------------------------------------------------
%% CEP
%%--------------------------------------------------------------------
%% @doc Returns whether the given term is a valid CEP (8 digits; no
%% check digit exists, so validity says nothing about existence).
%% @see brutils_cep:is_valid/1
-spec is_valid_cep(term()) -> boolean().
is_valid_cep(Cep) ->
brutils_cep:is_valid(Cep).
%% @doc Formats a valid CEP for display (`<<"NNNNN-NNN">>').
%% @see brutils_cep:format/1
-spec format_cep(binary()) ->
{ok, brutils_cep:formatted_cep()} | {error, invalid}.
format_cep(Cep) ->
brutils_cep:format(Cep).
%% @doc Removes the formatting symbols `.' and `-' from a CEP string.
%% @see brutils_cep:remove_symbols/1
-spec remove_symbols_cep(binary()) -> binary().
remove_symbols_cep(Cep) ->
brutils_cep:remove_symbols(Cep).
%% @doc Generates a random CEP.
%% @see brutils_cep:generate/0
-spec generate_cep() -> brutils_cep:cep().
generate_cep() ->
brutils_cep:generate().
%%--------------------------------------------------------------------
%% Phone
%%--------------------------------------------------------------------
%% @doc Returns whether the given term is a valid Brazilian phone
%% number, mobile or landline.
%% @see brutils_phone:is_valid/1
-spec is_valid_phone(term()) -> boolean().
is_valid_phone(Phone) ->
brutils_phone:is_valid(Phone).
%% @doc Returns whether the given term is a valid Brazilian phone
%% number of the given type (`mobile' or `landline').
%% @see brutils_phone:is_valid/2
-spec is_valid_phone(term(), brutils_phone:phone_type()) -> boolean().
is_valid_phone(Phone, Type) ->
brutils_phone:is_valid(Phone, Type).
%% @doc Formats a valid phone number for display
%% (`<<"(DD)NNNNN-NNNN">>' / `<<"(DD)NNNN-NNNN">>').
%% @see brutils_phone:format/1
-spec format_phone(binary()) -> {ok, binary()} | {error, invalid}.
format_phone(Phone) ->
brutils_phone:format(Phone).
%% @doc Removes common phone punctuation: `(', `)', `-', `+' and
%% spaces (dots are kept).
%% @see brutils_phone:remove_symbols/1
-spec remove_symbols_phone(binary()) -> binary().
remove_symbols_phone(Phone) ->
brutils_phone:remove_symbols(Phone).
%% @doc Removes the Brazilian international dialing code (`55') from
%% a phone number; see the domain module for the sharp edges.
%% @see brutils_phone:remove_international_dialing_code/1
-spec remove_international_dialing_code(binary()) -> binary().
remove_international_dialing_code(Phone) ->
brutils_phone:remove_international_dialing_code(Phone).
%% @doc Generates a random valid phone number of a random type.
%% @see brutils_phone:generate/0
-spec generate_phone() -> binary().
generate_phone() ->
brutils_phone:generate().
%% @doc Generates a random valid phone number of the given type.
%% @see brutils_phone:generate/1
-spec generate_phone(brutils_phone:phone_type()) -> binary().
generate_phone(Type) ->
brutils_phone:generate(Type).
%%--------------------------------------------------------------------
%% Passport
%%--------------------------------------------------------------------
%% @doc Returns whether the given term is a valid passport number
%% (2 uppercase letters + 6 digits; case-sensitive, no stripping).
%% @see brutils_passport:is_valid/1
-spec is_valid_passport(term()) -> boolean().
is_valid_passport(Passport) ->
brutils_passport:is_valid(Passport).
%% @doc Normalizes (uppercases, strips symbols) and formats a
%% passport number — the lenient counterpart to
%% {@link is_valid_passport/1}.
%% @see brutils_passport:format/1
-spec format_passport(binary()) ->
{ok, brutils_passport:passport()} | {error, invalid}.
format_passport(Passport) ->
brutils_passport:format(Passport).
%% @doc Removes the symbols `-', `.' and spaces from a passport
%% string (case is preserved).
%% @see brutils_passport:remove_symbols/1
-spec remove_symbols_passport(binary()) -> binary().
remove_symbols_passport(Passport) ->
brutils_passport:remove_symbols(Passport).
%% @doc Generates a random valid passport number.
%% @see brutils_passport:generate/0
-spec generate_passport() -> brutils_passport:passport().
generate_passport() ->
brutils_passport:generate().
%%--------------------------------------------------------------------
%% License plate
%%--------------------------------------------------------------------
%% @doc Returns whether the given term is a valid license plate of
%% either pattern (old format or Mercosul).
%% @see brutils_license_plate:is_valid/1
-spec is_valid_license_plate(term()) -> boolean().
is_valid_license_plate(Plate) ->
brutils_license_plate:is_valid(Plate).
%% @doc Returns whether the given term is a valid license plate of
%% the given pattern (`old_format' or `mercosul').
%% @see brutils_license_plate:is_valid/2
-spec is_valid_license_plate(term(), brutils_license_plate:plate_type()) ->
boolean().
is_valid_license_plate(Plate, Type) ->
brutils_license_plate:is_valid(Plate, Type).
%% @doc Formats a valid license plate for display (old format gets a
%% dash, Mercosul comes out bare; both uppercased).
%% @see brutils_license_plate:format/1
-spec format_license_plate(binary()) ->
{ok, brutils_license_plate:formatted_plate()} | {error, invalid}.
format_license_plate(Plate) ->
brutils_license_plate:format(Plate).
%% @doc Removes the dash (`-') from a license plate string.
%% @see brutils_license_plate:remove_symbols/1
-spec remove_symbols_license_plate(binary()) -> binary().
remove_symbols_license_plate(Plate) ->
brutils_license_plate:remove_symbols(Plate).
%% @doc Converts an old-format plate to the Mercosul pattern.
%% @see brutils_license_plate:convert_to_mercosul/1
-spec convert_license_plate_to_mercosul(binary()) ->
{ok, brutils_license_plate:plate()} | {error, invalid}.
convert_license_plate_to_mercosul(Plate) ->
brutils_license_plate:convert_to_mercosul(Plate).
%% @doc Detects the pattern of a license plate (`old_format' or
%% `mercosul').
%% @see brutils_license_plate:get_format/1
-spec get_format_license_plate(binary()) ->
{ok, brutils_license_plate:plate_type()} | {error, invalid}.
get_format_license_plate(Plate) ->
brutils_license_plate:get_format(Plate).
%% @doc Generates a random valid Mercosul plate.
%% @see brutils_license_plate:generate/0
-spec generate_license_plate() -> {ok, brutils_license_plate:plate()}.
generate_license_plate() ->
brutils_license_plate:generate().
%% @doc Generates a random valid plate in the given pattern
%% (`<<"LLLNNNN">>' or `<<"LLLNLNN">>').
%% @see brutils_license_plate:generate/1
-spec generate_license_plate(binary()) ->
{ok, brutils_license_plate:plate()} | {error, invalid}.
generate_license_plate(Pattern) ->
brutils_license_plate:generate(Pattern).
%%--------------------------------------------------------------------
%% Voter ID
%%--------------------------------------------------------------------
%% @doc Returns whether the given term is a valid voter id (título de
%% eleitor); 12 digits, or 13 for some São Paulo / Minas Gerais
%% titles.
%% @see brutils_voter_id:is_valid/1
-spec is_valid_voter_id(term()) -> boolean().
is_valid_voter_id(VoterId) ->
brutils_voter_id:is_valid(VoterId).
%% @doc Formats a valid 12-digit voter id for display
%% (`<<"NNNN NNNN NN NN">>'); valid 13-digit titles are refused
%% rather than truncated.
%% @see brutils_voter_id:format/1
-spec format_voter_id(binary()) ->
{ok, brutils_voter_id:formatted_voter_id()} | {error, invalid}.
format_voter_id(VoterId) ->
brutils_voter_id:format(VoterId).
%% @doc Generates a random valid voter id for a title issued abroad
%% (federative union `ZZ').
%% @see brutils_voter_id:generate/0
-spec generate_voter_id() -> {ok, brutils_voter_id:voter_id()}.
generate_voter_id() ->
brutils_voter_id:generate().
%% @doc Generates a random valid voter id for the given federative
%% union (two-letter code, case insensitive).
%% @see brutils_voter_id:generate/1
-spec generate_voter_id(binary()) ->
{ok, brutils_voter_id:voter_id()} | {error, invalid}.
generate_voter_id(Uf) ->
brutils_voter_id:generate(Uf).