A comprehensive Brazilian validation library for Python
Project description
ValidBR
A comprehensive Brazilian validation library for Node.js, Python, and PHP.
🚀 Live Demo
Test all ValidBR features directly in your browser: Open Demo
💡 Dica: Abra o arquivo
demo.htmlem 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
- Fork the repository
- Clone your fork
- Create a feature branch
- Make your changes
- Add tests for new functionality
- Run all tests:
docker-compose up --build - Submit a pull request
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🆘 Support
- 📧 Email: support@validbr.com
- 🐛 Issues: GitHub Issues
- 📖 Documentation: https://docs.validbr.com
- 💬 Discussions: GitHub Discussions
📈 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
📊 Statistics
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d197c26b86a748d9cc126b64c27ae903196e15436e70df8d5380f1b9b6ddb731
|
|
| MD5 |
1d7212fe1edbc0d69083d837c8889e62
|
|
| BLAKE2b-256 |
9a4e5aa84bf7765f7b874ddc309d9de4cb583e6b8f4385e427f0856539288bc5
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f56516610d7adb4b2a865876a6280862f759c81ec63921cfd05ddec5783c7eb5
|
|
| MD5 |
22e00af84019825b3b12507a6f5a48de
|
|
| BLAKE2b-256 |
d667492f273cf4fd1421f0f7cfb1d03642be8ee3e34ffec659ca1f0bb596e742
|