Project

br-utils

0.0
The project is in a healthy, maintained state
Brazilian Utils é uma biblioteca com foco na resolução de problemas que enfrentamos diariamente no desenvolvimento de aplicações para negócios no Brasil.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

~> 2.4
~> 13.0
~> 3.12

Runtime

 Project Readme

🇧🇷 Brazilian Utils

Biblioteca de utilitários para dados específicos do Brasil / Utils library for Brazilian-specific data

Gem Version

🇧🇷 Português | 🇺🇸 English


Português

📋 Recursos

Utilitários para trabalhar com formatos de dados brasileiros:

  • CPF - Validação, formatação e geração
  • CNH - Validação de Carteira Nacional de Habilitação
  • CNS - Validação e formatação do Cartão Nacional de Saúde
  • Passaporte - Validação, formatação e geração de números de passaporte
  • Certidão de Registro Civil - Validação e extração de dados da matrícula (nascimento/casamento/óbito)
  • Registro Profissional - Validação de OAB, CRM, CRO, CRP e CRC
  • CNPJ - Validação, formatação e geração (v1 numérico e v2 alfanumérico)
  • Inscrição Estadual (IE) - Validação por UF
  • CEP - Validação, formatação e busca via API ViaCEP
  • Moeda - Formatação de Real (R$) e conversão para extenso
  • Bancos - Consulta de instituições financeiras (código COMPE/ISPB)
  • Conta Bancária - Validação estrutural de agência e conta
  • IBAN - Validação, formatação e extração de dados do IBAN brasileiro
  • Cartão de Crédito/Débito - Validação via algoritmo de Luhn
  • Chave Pix - Identificação e validação de chaves Pix (CPF/CNPJ/email/telefone/EVP)
  • Payload Pix - Validação, leitura e geração de BR Code (Pix Copia e Cola)
  • Data - Verificação de feriados, dias úteis e conversão para texto
  • Email - Validação (RFC 5322)
  • Natureza Jurídica - Validação de códigos oficiais
  • Processos Judiciais - Validação, formatação e geração
  • CAEPF - Validação, formatação e extração de dados
  • CNO - Validação e formatação do Cadastro Nacional de Obras
  • CEI - Validação e formatação de CEI
  • CBO - Validação e consulta da Classificação Brasileira de Ocupações
  • CFOP - Validação e consulta do Código Fiscal de Operações e Prestações
  • CNAE - Validação, formatação e consulta de atividade econômica
  • NCM - Validação e formatação da Nomenclatura Comum do Mercosul
  • CSOSN - Validação de código de situação da operação no Simples Nacional
  • CST - Validação de Código de Situação Tributária (ICMS/IPI/PIS-COFINS)
  • Placas de Veículos - Validação e conversão (antigo/Mercosul)
  • VIN/Chassi - Validação de número de chassi (VIN)
  • Telefone - Validação e formatação (móvel/fixo)
  • PIS - Validação, formatação e geração (PIS/PASEP)
  • RENAVAM - Validação de registro de veículos
  • Título de Eleitor - Validação, formatação e geração
  • DDD - Consulta de código de área por estado
  • Estados (UF) - Consulta de estado, região e fuso horário
  • Municípios - Consulta de municípios por código IBGE
  • Chave de Acesso NF-e/DF-e - Validação, formatação e extração de dados
  • Números por Extenso - Conversão de números para texto
  • Texto - Capitalização e remoção de acentos

💾 Instalação

gem 'br-utils'
bundle install

🚀 Uso Rápido

# CPF
require 'brazilian-utils/cpf-utils'
BrazilianUtils::CPFUtils.is_valid('11144477735')  # => true
BrazilianUtils::CPFUtils.format_cpf('11144477735')  # => "111.444.777-35"
BrazilianUtils::CPFUtils.generate  # => "12345678901"

# CNS (Cartão Nacional de Saúde)
require 'brazilian-utils/cns-utils'
BrazilianUtils::CNSUtils.is_valid('123456789010000')  # => true
BrazilianUtils::CNSUtils.format('123456789010001')  # => "123 4567 8901 0001"

# Passaporte
require 'brazilian-utils/passport-utils'
BrazilianUtils::PassportUtils.is_valid('CL125167')  # => true
BrazilianUtils::PassportUtils.format('acd12736')  # => "ACD12736"
BrazilianUtils::PassportUtils.generate  # => "LB809567"

# Certidão de Registro Civil
require 'brazilian-utils/certidao-utils'
BrazilianUtils::CertidaoUtils.is_valid('10453901552013100012021000012321')  # => true
BrazilianUtils::CertidaoUtils.format('10453901552013100012021000012321')
# => "104539 01 55 2013 1 00012 021 0000123 21"
BrazilianUtils::CertidaoUtils.get_info('10453901552013100012021000012321')
# => {registryCns: "104539", acervo: "01", service: "55", year: 2013, type: "birth", ...}

# Registro Profissional (OAB/CRM/CRO/CRP/CRC)
require 'brazilian-utils/registro-profissional-utils'
BrazilianUtils::RegistroProfissionalUtils.is_valid(value: '123456/SP', council: 'OAB')  # => true
BrazilianUtils::RegistroProfissionalUtils.is_valid(value: '06/12345', council: 'CRP')  # => true

# CNPJ
require 'brazilian-utils/cnpj-utils'
BrazilianUtils::CNPJUtils.is_valid('34665388000161')  # => true
BrazilianUtils::CNPJUtils.format_cnpj('34665388000161')  # => "34.665.388/0001-61"
# CNPJ v2 (alfanumérico, IN RFB 2.119)
BrazilianUtils::CNPJUtils.valid?('12ABC345000188', version: 2)  # => true
BrazilianUtils::CNPJUtils.generate(version: 2)  # => "12ABC345000188" (alfanumérico)

# Inscrição Estadual (IE)
require 'brazilian-utils/ie-utils'
BrazilianUtils::IEUtils.is_valid('110042490114', 'SP')  # => true
BrazilianUtils::IEUtils.is_valid('12345678', 'RJ')  # => true

# CEP
require 'brazilian-utils/cep-utils'
BrazilianUtils::CEPUtils.format_cep('01310100')  # => "01310-100"
BrazilianUtils::CEPUtils.get_address('01310100')  # => {...endereço completo...}

# Moeda
require 'brazilian-utils/currency-utils'
BrazilianUtils::CurrencyUtils.format_currency(1234.56)  # => "1.234,56"
BrazilianUtils::CurrencyUtils.number_to_text(1234.56)  # => "mil duzentos e trinta e quatro reais..."

# Bancos
require 'brazilian-utils/bank-utils'
BrazilianUtils::BankUtils.get_by_code('341')  # => {code: "341", ispb: "60701190", name: "ITAÚ UNIBANCO S.A."}
BrazilianUtils::BankUtils.get_by_ispb('00000000')  # => {code: "001", ispb: "00000000", name: "Banco do Brasil S.A."}

# Conta Bancária
require 'brazilian-utils/bank-account-utils'
BrazilianUtils::BankAccountUtils.is_valid(bankCode: '001', agency: '1234', account: '123456', digit: 'X')  # => true

# IBAN
require 'brazilian-utils/iban-utils'
BrazilianUtils::IBANUtils.is_valid('BR1500000000000010932840814P2')  # => true
BrazilianUtils::IBANUtils.format('BR1500000000000010932840814P2')
# => "BR15 0000 0000 0000 1093 2840 814P 2"

# Cartão de Crédito/Débito
require 'brazilian-utils/credit-card-utils'
BrazilianUtils::CreditCardUtils.is_valid('4111111111111111')  # => true (Visa)
BrazilianUtils::CreditCardUtils.is_valid('4111111111111112')  # => false (falha no dígito de Luhn)

# Chave Pix
require 'brazilian-utils/pix-key-utils'
BrazilianUtils::PixKeyUtils.is_valid('123.456.789-09')  # => true
BrazilianUtils::PixKeyUtils.get_info('123.456.789-09')  # => {type: "cpf", value: "12345678909"}

# Payload Pix (BR Code)
require 'brazilian-utils/pix-payload-utils'
payload = BrazilianUtils::PixPayloadUtils.generate(
  key: '123.456.789-09', merchantName: 'Fulano de Tal', merchantCity: 'Brasília'
)
BrazilianUtils::PixPayloadUtils.is_valid(payload)  # => true
BrazilianUtils::PixPayloadUtils.get_info(payload)
# => {merchantName: "Fulano de Tal", merchantCity: "Brasilia", pointOfInitiation: "static", key: "12345678909"}

# Data
require 'brazilian-utils/date-utils'
BrazilianUtils::DateUtils.is_holiday(Date.new(2024, 1, 1))  # => true
BrazilianUtils::DateUtils.is_business_day(Date.new(2024, 3, 4))  # => true
BrazilianUtils::DateUtils.add_business_days(Date.new(2024, 3, 1), 1)  # => #<Date: 2024-03-04>

# CAEPF
require 'brazilian-utils/caepf-utils'
BrazilianUtils::CAEPFUtils.is_valid('293.118.610/001-84')  # => true
BrazilianUtils::CAEPFUtils.format('29311861000184')  # => "293.118.610/001-84"

# CNO
require 'brazilian-utils/cno-utils'
BrazilianUtils::CNOUtils.is_valid('11.084.01680/62')  # => true
BrazilianUtils::CNOUtils.format('111130137368')  # => "11.113.01373/68"

# CEI
require 'brazilian-utils/cei-utils'
BrazilianUtils::CEIUtils.is_valid('11.583.00249/85')  # => true
BrazilianUtils::CEIUtils.format('277297118187')  # => "27.729.71181/87"

# CBO
require 'brazilian-utils/cbo-utils'
BrazilianUtils::CBOUtils.is_valid('2124-05')  # => true
BrazilianUtils::CBOUtils.get('212405')  # => {code: "212405", description: "Analista de desenvolvimento de sistemas"}

# CFOP
require 'brazilian-utils/cfop-utils'
BrazilianUtils::CFOPUtils.is_valid('5102')  # => true
BrazilianUtils::CFOPUtils.get('5102')[:description]  # => "Venda de mercadoria adquirida ou recebida de terceiros..."

# CNAE
require 'brazilian-utils/cnae-utils'
BrazilianUtils::CNAEUtils.is_valid('6201-5/01')  # => true
BrazilianUtils::CNAEUtils.get('6201501')
# => {code: "6201501", description: "DESENVOLVIMENTO DE PROGRAMAS DE COMPUTADOR SOB ENCOMENDA"}

# NCM
require 'brazilian-utils/ncm-utils'
BrazilianUtils::NCMUtils.is_valid('2203.00.00')  # => true
BrazilianUtils::NCMUtils.format('84713012')  # => "8471.30.12"

# CSOSN
require 'brazilian-utils/csosn-utils'
BrazilianUtils::CSOSNUtils.is_valid('101')  # => true
BrazilianUtils::CSOSNUtils.get_description('101')  # => "Tributada pelo Simples Nacional com permissão de crédito"

# CST (ICMS/IPI/PIS-COFINS)
require 'brazilian-utils/cst-utils'
BrazilianUtils::CSTUtils.is_valid('110')  # => true (ICMS)
BrazilianUtils::CSTUtils.is_valid('07', tax: 'pis')  # => true

# Placa de Veículo
require 'brazilian-utils/license-plate-utils'
BrazilianUtils::LicensePlateUtils.is_valid('ABC1234')  # => true
BrazilianUtils::LicensePlateUtils.convert_to_mercosul('ABC1234')  # => "ABC1C34"

# VIN (Chassi)
require 'brazilian-utils/vin-utils'
BrazilianUtils::VINUtils.is_valid('1HGCM82633A004352')  # => true
BrazilianUtils::VINUtils.is_valid('1M8GDM9AXKP042788')  # => true (dígito verificador X)

# Telefone
require 'brazilian-utils/phone-utils'
BrazilianUtils::PhoneUtils.is_valid('11987654321')  # => true
BrazilianUtils::PhoneUtils.format('987654321')  # => "98765-4321"
BrazilianUtils::PhoneUtils.format('11987654321', mask: :ddd)  # => "(11) 98765-4321"

# Título de Eleitor
require 'brazilian-utils/voter-id-utils'
BrazilianUtils::VoterIdUtils.is_valid_voter_id('690847092828')  # => true
BrazilianUtils::VoterIdUtils.format('690847092828')  # => "6908 4709 28 28"
BrazilianUtils::VoterIdUtils.generate('SP')  # => "123456780140"

# DDD
require 'brazilian-utils/area-code-utils'
BrazilianUtils::AreaCodeUtils.get_info('11')
# => {areaCode: 11, stateCode: "SP", stateName: "São Paulo", regionCode: "SE", regionName: "Sudeste", stateCodes: ["SP"]}
BrazilianUtils::AreaCodeUtils.list_by_state('SP')  # => [11, 12, 13, 14, 15, 16, 17, 18, 19]

# Estados (UF)
require 'brazilian-utils/state-utils'
BrazilianUtils::StateUtils.get_by_ibge_code('35')
# => {code: "SP", name: "São Paulo", regionCode: "SE", regionName: "Sudeste", ibgeCode: 35}
BrazilianUtils::StateUtils.get_timezone('AM')  # => "America/Manaus"

# Municípios
require 'brazilian-utils/municipality-utils'
BrazilianUtils::MunicipalityUtils.get_by_code('3550308')  # => {code: "3550308", name: "São Paulo", stateCode: "SP"}
BrazilianUtils::MunicipalityUtils.list('DF')  # => [{code: "5300108", name: "Brasília", stateCode: "DF"}]

# Chave de Acesso NF-e/DF-e
require 'brazilian-utils/nfe-key-utils'
BrazilianUtils::NfeKeyUtils.is_valid('35170458716523000119550010000000121000123458')  # => true
BrazilianUtils::NfeKeyUtils.format('35170458716523000119550010000000121000123458')
# => "3517 0458 7165 2300 0119 5500 1000 0000 1210 0012 3458"

# Números por Extenso
require 'brazilian-utils/number-utils'
BrazilianUtils::NumberUtils.convert_to_words(123)  # => "cento e vinte e três"
BrazilianUtils::NumberUtils.convert_to_words(1, gender: :feminine)  # => "uma"

# Texto
require 'brazilian-utils/text-utils'
BrazilianUtils::TextUtils.capitalize('fulano de tal')  # => "Fulano de Tal"
BrazilianUtils::TextUtils.remove_accents('São Paulo')  # => "Sao Paulo"

📚 Documentação Detalhada

Para exemplos completos de cada utilitário, consulte a pasta examples/.

Principais Módulos:


English

📋 Features

Utilities for working with Brazilian data formats:

  • CPF - Validation, formatting, and generation
  • CNH - Driver's license validation
  • CNS - National Health Card (Cartão Nacional de Saúde) validation and formatting
  • Passport - Validation, formatting, and generation of passport numbers
  • Civil Registry Certificate - Validation and field extraction for registration numbers (birth/marriage/death)
  • Professional Registration - Validation for OAB, CRM, CRO, CRP, and CRC councils
  • CNPJ - Company tax ID validation, formatting, and generation (v1 numeric and v2 alphanumeric)
  • State Registration (IE) - Validation per state (UF)
  • CEP - Postal code validation, formatting, and address lookup (ViaCEP API)
  • Currency - Brazilian Real (R$) formatting and text conversion
  • Banks - Financial institution lookup (COMPE/ISPB code)
  • Bank Account - Structural agency and account validation
  • IBAN - Validation, formatting, and field extraction for the Brazilian IBAN
  • Credit/Debit Card - Luhn algorithm validation
  • Pix Key - Identification and validation of Pix keys (CPF/CNPJ/email/phone/EVP)
  • Pix Payload - Validation, parsing, and generation of BR Code (Pix Copy and Paste)
  • Date - Holiday checking, business-day calculations, and date-to-text conversion
  • Email - Email validation (RFC 5322)
  • Legal Nature - Official business entity code validation
  • Legal Process - Judicial process ID validation, formatting, and generation
  • CAEPF - Validation, formatting, and field extraction
  • CNO - National Construction Registry validation and formatting
  • CEI - Validation and formatting
  • CBO - Brazilian Occupation Classification validation and lookup
  • CFOP - Tax Operation Code validation and lookup
  • CNAE - Economic activity code validation, formatting, and lookup
  • NCM - Mercosul Common Nomenclature validation and formatting
  • CSOSN - Simples Nacional tax situation code validation
  • CST - Tax Situation Code validation (ICMS/IPI/PIS-COFINS)
  • License Plate - Vehicle plate validation and format conversion (old/Mercosul)
  • VIN/Chassis - Vehicle identification number (VIN) validation
  • Phone - Mobile and landline validation and formatting
  • PIS - Social security number validation, formatting, and generation
  • RENAVAM - Vehicle registration validation
  • Voter ID - Voter registration validation, formatting, and generation
  • Area Code - DDD lookup by state
  • States (UF) - State, region, and timezone lookup
  • Municipalities - Municipality lookup by IBGE code
  • NF-e/DF-e Access Key - Validation, formatting, and field extraction
  • Number to Words - Convert numbers to text
  • Text - Capitalization and accent removal

💾 Installation

gem 'br-utils'
bundle install

🚀 Quick Start

# CPF
require 'brazilian-utils/cpf-utils'
BrazilianUtils::CPFUtils.is_valid('11144477735')  # => true
BrazilianUtils::CPFUtils.format_cpf('11144477735')  # => "111.444.777-35"
BrazilianUtils::CPFUtils.generate  # => "12345678901"

# CNS (National Health Card)
require 'brazilian-utils/cns-utils'
BrazilianUtils::CNSUtils.is_valid('123456789010000')  # => true
BrazilianUtils::CNSUtils.format('123456789010001')  # => "123 4567 8901 0001"

# Passport
require 'brazilian-utils/passport-utils'
BrazilianUtils::PassportUtils.is_valid('CL125167')  # => true
BrazilianUtils::PassportUtils.format('acd12736')  # => "ACD12736"
BrazilianUtils::PassportUtils.generate  # => "LB809567"

# Civil Registry Certificate
require 'brazilian-utils/certidao-utils'
BrazilianUtils::CertidaoUtils.is_valid('10453901552013100012021000012321')  # => true
BrazilianUtils::CertidaoUtils.format('10453901552013100012021000012321')
# => "104539 01 55 2013 1 00012 021 0000123 21"
BrazilianUtils::CertidaoUtils.get_info('10453901552013100012021000012321')
# => {registryCns: "104539", acervo: "01", service: "55", year: 2013, type: "birth", ...}

# Professional Registration (OAB/CRM/CRO/CRP/CRC)
require 'brazilian-utils/registro-profissional-utils'
BrazilianUtils::RegistroProfissionalUtils.is_valid(value: '123456/SP', council: 'OAB')  # => true
BrazilianUtils::RegistroProfissionalUtils.is_valid(value: '06/12345', council: 'CRP')  # => true

# CNPJ
require 'brazilian-utils/cnpj-utils'
BrazilianUtils::CNPJUtils.is_valid('34665388000161')  # => true
BrazilianUtils::CNPJUtils.format_cnpj('34665388000161')  # => "34.665.388/0001-61"
# CNPJ v2 (alphanumeric, IN RFB 2.119)
BrazilianUtils::CNPJUtils.valid?('12ABC345000188', version: 2)  # => true
BrazilianUtils::CNPJUtils.generate(version: 2)  # => "12ABC345000188" (alphanumeric)

# State Registration (IE)
require 'brazilian-utils/ie-utils'
BrazilianUtils::IEUtils.is_valid('110042490114', 'SP')  # => true
BrazilianUtils::IEUtils.is_valid('12345678', 'RJ')  # => true

# CEP (Postal Code)
require 'brazilian-utils/cep-utils'
BrazilianUtils::CEPUtils.format_cep('01310100')  # => "01310-100"
BrazilianUtils::CEPUtils.get_address('01310100')  # => {...complete address...}

# Currency
require 'brazilian-utils/currency-utils'
BrazilianUtils::CurrencyUtils.format_currency(1234.56)  # => "1.234,56"
BrazilianUtils::CurrencyUtils.number_to_text(1234.56)  # => "mil duzentos e trinta e quatro reais..."

# Banks
require 'brazilian-utils/bank-utils'
BrazilianUtils::BankUtils.get_by_code('341')  # => {code: "341", ispb: "60701190", name: "ITAÚ UNIBANCO S.A."}
BrazilianUtils::BankUtils.get_by_ispb('00000000')  # => {code: "001", ispb: "00000000", name: "Banco do Brasil S.A."}

# Bank Account
require 'brazilian-utils/bank-account-utils'
BrazilianUtils::BankAccountUtils.is_valid(bankCode: '001', agency: '1234', account: '123456', digit: 'X')  # => true

# IBAN
require 'brazilian-utils/iban-utils'
BrazilianUtils::IBANUtils.is_valid('BR1500000000000010932840814P2')  # => true
BrazilianUtils::IBANUtils.format('BR1500000000000010932840814P2')
# => "BR15 0000 0000 0000 1093 2840 814P 2"

# Credit/Debit Card
require 'brazilian-utils/credit-card-utils'
BrazilianUtils::CreditCardUtils.is_valid('4111111111111111')  # => true (Visa)
BrazilianUtils::CreditCardUtils.is_valid('4111111111111112')  # => false (Luhn check digit fails)

# Pix Key
require 'brazilian-utils/pix-key-utils'
BrazilianUtils::PixKeyUtils.is_valid('123.456.789-09')  # => true
BrazilianUtils::PixKeyUtils.get_info('123.456.789-09')  # => {type: "cpf", value: "12345678909"}

# Pix Payload (BR Code)
require 'brazilian-utils/pix-payload-utils'
payload = BrazilianUtils::PixPayloadUtils.generate(
  key: '123.456.789-09', merchantName: 'Fulano de Tal', merchantCity: 'Brasília'
)
BrazilianUtils::PixPayloadUtils.is_valid(payload)  # => true
BrazilianUtils::PixPayloadUtils.get_info(payload)
# => {merchantName: "Fulano de Tal", merchantCity: "Brasilia", pointOfInitiation: "static", key: "12345678909"}

# Date
require 'brazilian-utils/date-utils'
BrazilianUtils::DateUtils.is_holiday(Date.new(2024, 1, 1))  # => true
BrazilianUtils::DateUtils.is_business_day(Date.new(2024, 3, 4))  # => true
BrazilianUtils::DateUtils.add_business_days(Date.new(2024, 3, 1), 1)  # => #<Date: 2024-03-04>

# CAEPF
require 'brazilian-utils/caepf-utils'
BrazilianUtils::CAEPFUtils.is_valid('293.118.610/001-84')  # => true
BrazilianUtils::CAEPFUtils.format('29311861000184')  # => "293.118.610/001-84"

# CNO
require 'brazilian-utils/cno-utils'
BrazilianUtils::CNOUtils.is_valid('11.084.01680/62')  # => true
BrazilianUtils::CNOUtils.format('111130137368')  # => "11.113.01373/68"

# CEI
require 'brazilian-utils/cei-utils'
BrazilianUtils::CEIUtils.is_valid('11.583.00249/85')  # => true
BrazilianUtils::CEIUtils.format('277297118187')  # => "27.729.71181/87"

# CBO
require 'brazilian-utils/cbo-utils'
BrazilianUtils::CBOUtils.is_valid('2124-05')  # => true
BrazilianUtils::CBOUtils.get('212405')  # => {code: "212405", description: "Analista de desenvolvimento de sistemas"}

# CFOP
require 'brazilian-utils/cfop-utils'
BrazilianUtils::CFOPUtils.is_valid('5102')  # => true
BrazilianUtils::CFOPUtils.get('5102')[:description]  # => "Venda de mercadoria adquirida ou recebida de terceiros..."

# CNAE
require 'brazilian-utils/cnae-utils'
BrazilianUtils::CNAEUtils.is_valid('6201-5/01')  # => true
BrazilianUtils::CNAEUtils.get('6201501')
# => {code: "6201501", description: "DESENVOLVIMENTO DE PROGRAMAS DE COMPUTADOR SOB ENCOMENDA"}

# NCM
require 'brazilian-utils/ncm-utils'
BrazilianUtils::NCMUtils.is_valid('2203.00.00')  # => true
BrazilianUtils::NCMUtils.format('84713012')  # => "8471.30.12"

# CSOSN
require 'brazilian-utils/csosn-utils'
BrazilianUtils::CSOSNUtils.is_valid('101')  # => true
BrazilianUtils::CSOSNUtils.get_description('101')  # => "Tributada pelo Simples Nacional com permissão de crédito"

# CST (ICMS/IPI/PIS-COFINS)
require 'brazilian-utils/cst-utils'
BrazilianUtils::CSTUtils.is_valid('110')  # => true (ICMS)
BrazilianUtils::CSTUtils.is_valid('07', tax: 'pis')  # => true

# License Plate
require 'brazilian-utils/license-plate-utils'
BrazilianUtils::LicensePlateUtils.is_valid('ABC1234')  # => true
BrazilianUtils::LicensePlateUtils.convert_to_mercosul('ABC1234')  # => "ABC1C34"

# VIN (Chassis)
require 'brazilian-utils/vin-utils'
BrazilianUtils::VINUtils.is_valid('1HGCM82633A004352')  # => true
BrazilianUtils::VINUtils.is_valid('1M8GDM9AXKP042788')  # => true (check digit is X)

# Phone
require 'brazilian-utils/phone-utils'
BrazilianUtils::PhoneUtils.is_valid('11987654321')  # => true
BrazilianUtils::PhoneUtils.format('987654321')  # => "98765-4321"
BrazilianUtils::PhoneUtils.format('11987654321', mask: :ddd)  # => "(11) 98765-4321"

# Voter ID
require 'brazilian-utils/voter-id-utils'
BrazilianUtils::VoterIdUtils.is_valid_voter_id('690847092828')  # => true
BrazilianUtils::VoterIdUtils.format('690847092828')  # => "6908 4709 28 28"
BrazilianUtils::VoterIdUtils.generate('SP')  # => "123456780140"

# Area Code (DDD)
require 'brazilian-utils/area-code-utils'
BrazilianUtils::AreaCodeUtils.get_info('11')
# => {areaCode: 11, stateCode: "SP", stateName: "São Paulo", regionCode: "SE", regionName: "Sudeste", stateCodes: ["SP"]}
BrazilianUtils::AreaCodeUtils.list_by_state('SP')  # => [11, 12, 13, 14, 15, 16, 17, 18, 19]

# States (UF)
require 'brazilian-utils/state-utils'
BrazilianUtils::StateUtils.get_by_ibge_code('35')
# => {code: "SP", name: "São Paulo", regionCode: "SE", regionName: "Sudeste", ibgeCode: 35}
BrazilianUtils::StateUtils.get_timezone('AM')  # => "America/Manaus"

# Municipalities
require 'brazilian-utils/municipality-utils'
BrazilianUtils::MunicipalityUtils.get_by_code('3550308')  # => {code: "3550308", name: "São Paulo", stateCode: "SP"}
BrazilianUtils::MunicipalityUtils.list('DF')  # => [{code: "5300108", name: "Brasília", stateCode: "DF"}]

# NF-e/DF-e Access Key
require 'brazilian-utils/nfe-key-utils'
BrazilianUtils::NfeKeyUtils.is_valid('35170458716523000119550010000000121000123458')  # => true
BrazilianUtils::NfeKeyUtils.format('35170458716523000119550010000000121000123458')
# => "3517 0458 7165 2300 0119 5500 1000 0000 1210 0012 3458"

# Number to Words
require 'brazilian-utils/number-utils'
BrazilianUtils::NumberUtils.convert_to_words(123)  # => "cento e vinte e três"
BrazilianUtils::NumberUtils.convert_to_words(1, gender: :feminine)  # => "uma"

# Text
require 'brazilian-utils/text-utils'
BrazilianUtils::TextUtils.capitalize('fulano de tal')  # => "Fulano de Tal"
BrazilianUtils::TextUtils.remove_accents('São Paulo')  # => "Sao Paulo"

📚 Full Documentation

For detailed examples of each utility, check the examples/ folder.

Main Modules:


🧪 Development

# Install dependencies
bundle install

# Run tests
bundle exec rspec

# Run specific test
bundle exec rspec spec/cpf_utils_spec.rb

📖 API Reference

Common Patterns

Most utilities follow these patterns:

Validation:

.is_valid(value)      # Main validation method
.valid?(value)        # Alias for is_valid

Formatting:

.format(value)        # Format with standard symbols
.remove_symbols(value) # Remove formatting symbols

Generation:

.generate             # Generate random valid value

Utility-Specific Methods

CEP:

  • get_address(cep) - Fetch address from CEP
  • get_cep_information_from_address(uf, city, street) - Find CEPs

Phone:

  • is_valid(phone, type:) - Validate with type (:mobile or :landline)
  • remove_international_dialing_code(phone) - Remove +55/55

License Plate:

  • convert_to_mercosul(plate) - Convert old format to Mercosul
  • get_format(plate) - Detect format ("LLLNNNN" or "LLLNLNN")

Voter ID:

  • generate(uf) - Generate for specific state

Currency:

  • format_currency(value) - Format as X.XXX,XX (pass symbol: true for "R$ X.XXX,XX")
  • number_to_text(value) - Convert to Brazilian Portuguese text

Date:

  • is_holiday(date, uf) - Check if date is holiday
  • convert_date_to_text(date) - Convert to Portuguese text

Legal Nature:

  • get_description(code) - Get description for code
  • list_by_category(category) - List codes by category (1-5)

Legal Process:

  • generate(year, orgao) - Generate for specific year and judicial segment

📊 Examples by Use Case

Form Validation

# Validate user input
cpf = params[:cpf]
if BrazilianUtils::CPFUtils.valid?(cpf)
  # Process valid CPF
else
  errors.add(:cpf, "inválido")
end

Display Formatting

# Format for display
cpf = "11144477735"
formatted = BrazilianUtils::CPFUtils.format_cpf(cpf)
puts formatted  # => "111.444.777-35"

Test Data Generation

# Generate test data
10.times do
  cpf = BrazilianUtils::CPFUtils.generate
  puts BrazilianUtils::CPFUtils.format_cpf(cpf)
end

API Integration

# Lookup address from CEP
address = BrazilianUtils::CEPUtils.get_address('01310100')
if address
  puts "#{address.logradouro}, #{address.bairro}"
  puts "#{address.localidade} - #{address.uf}"
end

🤝 Contributing

Contributions are welcome! Please feel free to submit pull requests.

Como contribuir / How to contribute:

  1. Fork o projeto / Fork the project
  2. Crie seu branch (git checkout -b feature/AmazingFeature)
  3. Commit suas mudanças (git commit -m 'Add some AmazingFeature')
  4. Push para o branch (git push origin feature/AmazingFeature)
  5. Abra um Pull Request / Open a Pull Request

📄 License

Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE.txt para detalhes.

This project is licensed under the MIT License - see the LICENSE.txt file for details.

🙏 Acknowledgments

Baseado na implementação Python: brazilian-utils/python

Based on the Python implementation: brazilian-utils/python

📞 Support


Made with ❤️ for the Brazilian Ruby community