Skip to main content

A comprehensive Brazilian validation library for Python

Project description

ValidBR

A comprehensive Brazilian validation library for Node.js, Python, and PHP.

npm version PyPI version Packagist version Build Status Test Coverage License: MIT

🚀 Live Demo

Test all ValidBR features directly in your browser: Open Demo

💡 Dica: Abra o arquivo demo.html em seu navegador para testar todas as funcionalidades do ValidBR de forma interativa!

✨ Features

CPF/CNPJ Validation - Complete validation with check digits and state identification

📞 Phone Number Validation - DDD identification, phone format validation, and state lookup

✉️ Email Validation - Brazilian email format validation with provider detection

🎭 Mask Application - Apply and remove masks (e.g., 000.000.000-00, (11) 99999-9999)

👤 Full Name Validation - No numbers or invalid characters, Brazilian name detection

📅 Birth Date Validation - No future dates or people over 130 years old, age calculation

📮 CEP Validation - With or without external API consultation (ViaCEP)

🆔 RG Validation - Including check digits for some states

🗺️ DDD Information - State and city lookup from DDD codes

📍 CEP Information - Optional API consultation for address details

🏛️ State Identification - From CPF/CNPJ first two digits

📋 State Registration (IE) Validation - By UF with state-specific algorithms

🧹 Input Sanitization - Remove spaces and invalid special characters

🔄 Reverse Formatting - Transform "(11) 91234-5678" to "11912345678"

📦 Installation

Node.js (npm)

npm install validbr

Python (pip)

pip install validbr

PHP (Composer)

composer require validbr/validbr

🚀 Quick Start

Node.js

const ValidBR = require('validbr');

// CPF validation
console.log(ValidBR.cpf.isValid('123.456.789-09')); // true
console.log(ValidBR.cpf.generate()); // Generate valid CPF
console.log(ValidBR.cpf.getState('12345678909')); // 'São Paulo'

// Phone validation
console.log(ValidBR.phone.isValid('(11) 91234-5678')); // true
console.log(ValidBR.phone.getState('11')); // 'São Paulo'

// Apply mask
console.log(ValidBR.cpf.applyMask('12345678909')); // '123.456.789-09'
console.log(ValidBR.phone.applyMask('11912345678')); // '(11) 91234-5678'

Python

from validbr import ValidBR

# CPF validation
print(ValidBR.cpf.is_valid('123.456.789-09'))  # True
print(ValidBR.cpf.generate())  # Generate valid CPF
print(ValidBR.cpf.get_state('12345678909'))  # 'São Paulo'

# Phone validation
print(ValidBR.phone.is_valid('(11) 91234-5678'))  # True
print(ValidBR.phone.get_state('11'))  # 'São Paulo'

# Apply mask
print(ValidBR.cpf.apply_mask('12345678909'))  # '123.456.789-09'
print(ValidBR.phone.apply_mask('11912345678'))  # '(11) 91234-5678'

PHP

use ValidBR\ValidBR;

// CPF validation
echo ValidBR::cpf()->isValid('123.456.789-09') ? 'true' : 'false'; // true
echo ValidBR::cpf()->generate(); // Generate valid CPF
echo ValidBR::cpf()->getState('12345678909'); // 'São Paulo'

// Phone validation
echo ValidBR::phone()->isValid('(11) 91234-5678') ? 'true' : 'false'; // true
echo ValidBR::phone()->getState('11'); // 'São Paulo'

// Apply mask
echo ValidBR::cpf()->applyMask('12345678909'); // '123.456.789-09'
echo ValidBR::phone()->applyMask('11912345678'); // '(11) 91234-5678'

📚 Documentation

CPF Validation

// Node.js
ValidBR.cpf.isValid('123.456.789-09');        // true/false
ValidBR.cpf.generate();                        // Generate valid CPF
ValidBR.cpf.applyMask('12345678909');         // '123.456.789-09'
ValidBR.cpf.removeMask('123.456.789-09');     // '12345678909'
ValidBR.cpf.getState('12345678909');          // 'São Paulo'

CNPJ Validation

// Node.js
ValidBR.cnpj.isValid('12.345.678/0001-95');   // true/false
ValidBR.cnpj.generate();                       // Generate valid CNPJ
ValidBR.cnpj.applyMask('12345678000195');     // '12.345.678/0001-95'
ValidBR.cnpj.removeMask('12.345.678/0001-95'); // '12345678000195'
ValidBR.cnpj.getState('12345678000195');      // 'São Paulo'

Phone Validation

// Node.js
ValidBR.phone.isValid('(11) 91234-5678');     // true/false
ValidBR.phone.getDDD('(11) 91234-5678');      // '11'
ValidBR.phone.getState('11');                 // 'São Paulo'
ValidBR.phone.applyMask('11912345678');       // '(11) 91234-5678'
ValidBR.phone.removeMask('(11) 91234-5678');  // '11912345678'
ValidBR.phone.getValidDDDs();                 // Array of valid DDDs

Email Validation

// Node.js
ValidBR.email.isValid('user@example.com');    // true/false
ValidBR.email.sanitize(' user@example.com '); // 'user@example.com'
ValidBR.email.getDomain('user@example.com');  // 'example.com'
ValidBR.email.getUsername('user@example.com'); // 'user'
ValidBR.email.isBrazilianProvider('user@uol.com.br'); // true

Name Validation

// Node.js
ValidBR.name.isValid('João Silva Santos');    // true/false
ValidBR.name.sanitize('João Silva Santos  '); // 'João Silva Santos'
ValidBR.name.getFirstName('João Silva Santos'); // 'João'
ValidBR.name.getLastName('João Silva Santos');  // 'Santos'
ValidBR.name.getInitials('João Silva Santos');  // 'JSS'
ValidBR.name.hasCommonBrazilianName('João');   // true

Birth Date Validation

// Node.js
ValidBR.birthDate.isValid('1990-05-15');      // true/false
ValidBR.birthDate.getAge('1990-05-15');       // Current age
ValidBR.birthDate.isAdult('1990-05-15');      // true/false
ValidBR.birthDate.isElderly('1940-05-15');    // true/false
ValidBR.birthDate.isMinor('2010-05-15');      // true/false
ValidBR.birthDate.format('1990-05-15', 'DD/MM/YYYY'); // '15/05/1990'
ValidBR.birthDate.getZodiacSign('1990-05-15'); // 'Touro'

CEP Validation

// Node.js
ValidBR.cep.isValid('01234-567');             // true/false
ValidBR.cep.getInfo('01234-567');             // Get address info (async)
ValidBR.cep.applyMask('01234567');            // '01234-567'
ValidBR.cep.removeMask('01234-567');          // '01234567'
ValidBR.cep.getState('01234567');             // 'São Paulo'
ValidBR.cep.isFromSaoPaulo('01234567');       // true/false
ValidBR.cep.getRegion('01234567');            // 'Sudeste'

RG Validation

// Node.js
ValidBR.rg.isValid('12.345.678-9', 'SP');     // true/false (state required)
ValidBR.rg.applyMask('123456789');            // '12.345.678-9'
ValidBR.rg.removeMask('12.345.678-9');        // '123456789'
ValidBR.rg.generate('SP');                    // Generate valid RG for SP
ValidBR.rg.getValidStates();                  // Array of supported states

State Registration (IE) Validation

// Node.js
ValidBR.ie.isValid('123.456.789', 'SP');      // true/false
ValidBR.ie.applyMask('123456789', 'SP');      // '123.456.789'
ValidBR.ie.removeMask('123.456.789');         // '123456789'
ValidBR.ie.generate('SP');                    // Generate valid IE for SP
ValidBR.ie.getValidStates();                  // Array of supported states

Utility Functions

// Node.js
ValidBR.sanitize('  test@example.com  ');     // 'test@example.com'
ValidBR.removeNonNumeric('abc123def456');     // '123456'
ValidBR.removeNonAlphabetic('João123Silva');  // 'JoãoSilva'

🧪 Testing

Run All Tests with Docker

# Navigate to docker directory
cd docker

# Run all tests
docker-compose up --build

# Run tests for specific language
docker-compose run nodejs npm test
docker-compose run python python -m pytest
docker-compose run php composer test

Run Tests Individually

# Node.js
cd nodejs
npm install
npm test

# Python
cd python
pip install -e .
python -m pytest

# PHP
cd php
composer install
composer test

Test Coverage

# Node.js
npm run test:coverage

# Python
python -m pytest --cov=validbr

# PHP
composer test:coverage

🎯 Browser Testing

Open demo.html in your browser to test all ValidBR features interactively. The demo includes:

  • Real-time validation for all document types
  • Mask application and removal
  • State and region identification
  • Age calculation and zodiac signs
  • CEP information lookup
  • Input sanitization examples

🤝 Contributing

We welcome contributions! Please read our Contributing Guide for details on:

  • Code of Conduct
  • How to report bugs
  • How to suggest features
  • How to submit pull requests
  • Development setup

Development Setup

  1. Fork the repository
  2. Clone your fork
  3. Create a feature branch
  4. Make your changes
  5. Add tests for new functionality
  6. Run all tests: docker-compose up --build
  7. Submit a pull request

📄 License

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

🆘 Support

📈 Changelog

See CHANGELOG.md for version history and changes.

🚀 Publicação

Para informações sobre como publicar o ValidBR nos repositórios de pacotes, consulte o Guia de Publicação.

Status de Publicação

  • NPM: Pronto para publicação
  • PyPI: Pronto para publicação
  • Packagist: Pronto para publicação

Comandos de Publicação

Usando o Script de Automação (Recomendado)

# Executar todos os testes
./publish.sh test

# Publicar no NPM
./publish.sh npm

# Publicar no PyPI
./publish.sh pypi

# Verificar configuração do Packagist
./publish.sh packagist

# Processo completo (testes + publicação)
./publish.sh all

Comandos Manuais

# NPM
cd nodejs && npm publish

# PyPI
cd python && python setup.py sdist bdist_wheel && twine upload dist/*

# Packagist
# Conectar repositório Git ao Packagist.org

🌟 Star History

Star History Chart

📊 Statistics

GitHub stars GitHub forks GitHub issues GitHub pull requests

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

validbr-1.0.0.tar.gz (5.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

validbr-1.0.0-py3-none-any.whl (5.6 kB view details)

Uploaded Python 3

File details

Details for the file validbr-1.0.0.tar.gz.

File metadata

  • Download URL: validbr-1.0.0.tar.gz
  • Upload date:
  • Size: 5.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.6

File hashes

Hashes for validbr-1.0.0.tar.gz
Algorithm Hash digest
SHA256 d197c26b86a748d9cc126b64c27ae903196e15436e70df8d5380f1b9b6ddb731
MD5 1d7212fe1edbc0d69083d837c8889e62
BLAKE2b-256 9a4e5aa84bf7765f7b874ddc309d9de4cb583e6b8f4385e427f0856539288bc5

See more details on using hashes here.

File details

Details for the file validbr-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: validbr-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 5.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.6

File hashes

Hashes for validbr-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f56516610d7adb4b2a865876a6280862f759c81ec63921cfd05ddec5783c7eb5
MD5 22e00af84019825b3b12507a6f5a48de
BLAKE2b-256 d667492f273cf4fd1421f0f7cfb1d03642be8ee3e34ffec659ca1f0bb596e742

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page