validbr


Namevalidbr JSON
Version 2.0.0 PyPI version JSON
download
home_pagehttps://github.com/validbr/validbr
SummaryA comprehensive Brazilian validation library for Python
upload_time2025-08-09 02:51:43
maintainerNone
docs_urlNone
authorValidBR Team
requires_python>=3.7
licenseNone
keywords brazil validation cpf cnpj cep phone email rg ie ddd mask sanitize
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # ValidBR 🇧🇷

[![npm version](https://badge.fury.io/js/validbr.svg)](https://www.npmjs.com/package/validbr)
[![PyPI version](https://badge.fury.io/py/validbr.svg)](https://pypi.org/project/validbr/)
[![Packagist version](https://img.shields.io/packagist/v/validbr/validbr.svg)](https://packagist.org/packages/validbr/validbr)
[![Build Status](https://github.com/validbr/validbr/workflows/CI/badge.svg)](https://github.com/validbr/validbr/actions)
[![Test Coverage](https://codecov.io/gh/validbr/validbr/branch/main/graph/badge.svg)](https://codecov.io/gh/validbr/validbr)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![GitHub stars](https://img.shields.io/github/stars/validbr/validbr)](https://github.com/validbr/validbr/stargazers)
[![GitHub forks](https://img.shields.io/github/forks/validbr/validbr)](https://github.com/validbr/validbr/network)
[![GitHub issues](https://img.shields.io/github/issues/validbr/validbr)](https://github.com/validbr/validbr/issues)
[![GitHub pull requests](https://img.shields.io/github/issues-pr/validbr/validbr)](https://github.com/validbr/validbr/pulls)

<div align="center">
  <img src="https://img.shields.io/badge/Node.js-✓-green?style=for-the-badge&logo=node.js" alt="Node.js Support">
  <img src="https://img.shields.io/badge/Python-✓-green?style=for-the-badge&logo=python" alt="Python Support">
  <img src="https://img.shields.io/badge/PHP-✓-green?style=for-the-badge&logo=php" alt="PHP Support">
</div>

---

<div align="center">
  <h3>📦 Available on Package Managers</h3>
  
  <a href="https://www.npmjs.com/package/validbr">
    <img src="https://img.shields.io/badge/npm-validbr-blue?style=for-the-badge&logo=npm" alt="npm">
  </a>
  
  <a href="https://pypi.org/project/validbr/">
    <img src="https://img.shields.io/badge/PyPI-validbr-blue?style=for-the-badge&logo=pypi" alt="PyPI">
  </a>
  
  <a href="https://packagist.org/packages/validbr/validbr">
    <img src="https://img.shields.io/badge/Packagist-validbr-blue?style=for-the-badge&logo=composer" alt="Packagist">
  </a>
</div>

---

## 🌟 Live Demo

Test all ValidBR features directly in your browser: **[🚀 Open Interactive Demo](demo.html)**

> **💡 Tip**: Open the `demo.html` file in your browser to test all ValidBR features interactively!

---

## 📋 Table of Contents

- [Overview](#overview)
- [Features](#-features)
- [Installation](#-installation)
- [Quick Start](#-quick-start)
- [Documentation](#-documentation)
- [Testing](#-testing)
- [Contributing](#-contributing)
- [Support](#-support)
- [License](#-license)

---

## 📖 Overview

**ValidBR** is a comprehensive Brazilian validation library available for **Node.js**, **Python**, and **PHP**. It provides robust validation for Brazilian documents, phone numbers, addresses, and personal information with advanced features like mask application, state identification, and data sanitization.

### 🎯 What ValidBR Validates

- **📄 Documents**: CPF, CNPJ, RG, IE (State Registration), CNH, Voter ID (Título de Eleitor), PIS/NIS/NIT/PASEP
- **📞 Communication**: Phone numbers, Email addresses
- **📍 Location**: CEP (ZIP codes), DDD codes, State identification
- **👤 Personal**: Full names, Birth dates
- **🛠️ Utilities**: Mask application/removal, Data sanitization

---

## ✨ Features

### 🔐 Document Validation
- ✅ **CPF/CNPJ Validation** - Complete validation with check digits and state identification
- ✅ **RG Validation** - Including check digits for supported states
- ✅ **State Registration (IE) Validation** - By UF with state-specific algorithms
- ✅ **CNH Validation** - Brazilian Driver's License (CNH) validation
- ✅ **Voter ID (Título de Eleitor) Validation**
- ✅ **PIS/NIS/NIT/PASEP Validation**

### 📞 Communication Validation
- ✅ **Phone Number Validation** - DDD identification, phone format validation, and state lookup
- ✅ **Email Validation** - Brazilian email format validation with provider detection

### 📍 Location & Address
- ✅ **CEP Validation** - With or without external API consultation (ViaCEP)
- ✅ **DDD Information** - State and city lookup from DDD codes
- ✅ **State Identification** - From CPF/CNPJ first two digits

### 👤 Personal Information
- ✅ **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

### 🛠️ Utility Functions
- ✅ **Mask Application** - Apply and remove masks (e.g., 000.000.000-00, (11) 99999-9999)
- ✅ **Input Sanitization** - Remove spaces and invalid special characters
- ✅ **Reverse Formatting** - Transform "(11) 91234-5678" to "11912345678"

---

## 📦 Installation

### Node.js (npm)
```bash
npm install validbr
```
📦 **[View on npm](https://www.npmjs.com/package/validbr)**

### Python (pip)
```bash
pip install validbr
```
📦 **[View on PyPI](https://pypi.org/project/validbr/)**

### PHP (Composer)
```bash
composer require validbr/validbr
```
📦 **[View on Packagist](https://packagist.org/packages/validbr/validbr)**

---

## 🚀 Quick Start

### Node.js
```javascript
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'

// CNH validation
console.log(ValidBR.cnh.isValid('02650306461')); // true
console.log(ValidBR.cnh.generate()); // Generate valid CNH

// Voter ID validation
console.log(ValidBR.tituloEleitor.isValid('123456789012')); // true
console.log(ValidBR.tituloEleitor.generate()); // Generate valid Voter ID

// PIS validation
console.log(ValidBR.pis.isValid('123.45678.90-1')); // true
console.log(ValidBR.pis.generate()); // Generate valid PIS

// 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
```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'

# CNH validation
print(validbr.cnh.is_valid('02650306461')) # True
print(validbr.cnh.generate()) # Generate valid CNH

# Voter ID validation
print(validbr.titulo_eleitor.is_valid('123456789012')) # True
print(validbr.titulo_eleitor.generate()) # Generate valid Voter ID

# PIS validation
print(validbr.pis.is_valid('123.45678.90-1')) # True
print(validbr.pis.generate()) # Generate valid PIS

# 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
```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'

// CNH validation
echo ValidBR::cnh()->isValid('02650306461') ? 'true' : 'false'; // true
echo ValidBR::cnh()->generate(); // Generate valid CNH

// Voter ID validation
echo ValidBR::tituloEleitor()->isValid('123456789012') ? 'true' : 'false'; // true
echo ValidBR::tituloEleitor()->generate(); // Generate valid Voter ID

// PIS validation
echo ValidBR::pis()->isValid('123.45678.90-1') ? 'true' : 'false'; // true
echo ValidBR::pis()->generate(); // Generate valid PIS

// 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
```javascript
// 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
```javascript
// 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
```javascript
// 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
```javascript
// 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
```javascript
// Node.js
ValidBR.fullName.isValid('João Silva Santos');    // true/false
ValidBR.fullName.sanitize('João Silva Santos  '); // 'João Silva Santos'
ValidBR.fullName.getFirstName('João Silva Santos'); // 'João'
ValidBR.fullName.getLastName('João Silva Santos');  // 'Santos'
ValidBR.fullName.getInitials('João Silva Santos');  // 'JSS'
ValidBR.fullName.hasCommonBrazilianName('João');   // true
```

### Birth Date Validation
```javascript
// 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
```javascript
// 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
```javascript
// 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
```javascript
// Node.js
ValidBR.ie.isValid('123.456.789', 'SP');      // true/false
ValidBR.ie.applyMask('123.456.789', '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
```

### CNH Validation
```javascript
// Node.js
ValidBR.cnh.isValid('02650306461'); // true/false
ValidBR.cnh.generate(); // Generate valid CNH
ValidBR.cnh.applyMask('02650306461'); // '02650306461'
ValidBR.cnh.removeMask('02650306461'); // '02650306461'
```

### Voter ID (Título de Eleitor) Validation
```javascript
// Node.js
ValidBR.tituloEleitor.isValid('123456789012'); // true/false
ValidBR.tituloEleitor.generate(); // Generate valid Voter ID
ValidBR.tituloEleitor.applyMask('123456789012'); // '1234 5678 9012'
ValidBR.tituloEleitor.removeMask('1234 5678 9012'); // '123456789012'
```

### PIS/NIS/NIT/PASEP Validation
```javascript
// Node.js
ValidBR.pis.isValid('123.45678.90-1'); // true/false
ValidBR.pis.generate(); // Generate valid PIS
ValidBR.pis.applyMask('12345678901'); // '123.45678.90-1'
ValidBR.pis.removeMask('123.45678.90-1'); // '12345678901'
```

### Utility Functions
```javascript
// 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
```bash
# 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
```bash
# 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
```bash
# 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](CONTRIBUTING.md) 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

### Quick Links
- 📋 **[Contributing Guide](CONTRIBUTING.md)**
- 🐛 **[Bug Report Template](.github/ISSUE_TEMPLATE/bug_report.md)**
- 💡 **[Feature Request Template](.github/ISSUE_TEMPLATE/feature_request.md)**
- 🔄 **[Pull Request Template](.github/pull_request_template.md)**

---

## 📄 License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

---

## 🆘 Support

- 📧 **Email**: julio@grupojpc.com.br
- 🐛 **Issues**: [GitHub Issues](https://github.com/validbr/validbr/issues)
- 📖 **Documentation**: [https://docs.validbr.com](https://docs.validbr.com)
- 💬 **Discussions**: [GitHub Discussions](https://github.com/validbr/validbr/discussions)
- 📱 **Discord**: [Join our community](https://discord.gg/validbr)

---

## 📈 Changelog

See [CHANGELOG.md](CHANGELOG.md) for version history and changes.

---

## 🌟 Star History

[![Star History Chart](https://api.star-history.com/svg?repos=validbr/validbr&type=Date)](https://star-history.com/#validbr/validbr&Date)

---

## 📊 Statistics

![GitHub stars](https://img.shields.io/github/stars/validbr/validbr)
![GitHub forks](https://img.shields.io/github/forks/validbr/validbr)
![GitHub issues](https://img.shields.io/github/issues/validbr/validbr)
![GitHub pull requests](https://img.shields.io/github/issues-pr/validbr/validbr)

---

## 🚀 Publishing

For information on how to publish ValidBR to package repositories, see the [Publishing Guide](PUBLISH_GUIDE.md).

### Publication Status
- [x] **NPM**: Ready for publication
- [x] **PyPI**: Ready for publication  
- [x] **Packagist**: Ready for publication

### Publishing Commands

#### Using Automation Script (Recommended)
```bash
# Run all tests
./publish.sh test

# Publish to NPM
./publish.sh npm

# Publish to PyPI
./publish.sh pypi

# Check Packagist configuration
./publish.sh packagist

# Complete process (tests + publishing)
./publish.sh all
```

#### Manual Commands
```bash
# NPM
cd nodejs && npm publish

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

# Packagist
# Connect Git repository to Packagist.org
```

---

<div align="center">
  <h3>🇧🇷 Versão em Português</h3>
</div>

---

## 📖 Visão Geral

**ValidBR** é uma biblioteca abrangente de validação brasileira disponível para **Node.js**, **Python** e **PHP**. Ela fornece validação robusta para documentos brasileiros, números de telefone, endereços e informações pessoais com recursos avançados como aplicação de máscaras, identificação de estado e sanitização de dados.

### 🎯 O que o ValidBR Valida

- **📄 Documentos**: CPF, CNPJ, RG, IE (Inscrição Estadual), CNH, Título de Eleitor, PIS/NIS/NIT/PASEP
- **📞 Comunicação**: Números de telefone, Endereços de email
- **📍 Localização**: CEP, Códigos DDD, Identificação de estado
- **👤 Pessoal**: Nomes completos, Datas de nascimento
- **🛠️ Utilitários**: Aplicação/remoção de máscaras, Sanitização de dados

---

## ✨ Funcionalidades

### 🔐 Validação de Documentos
- ✅ **Validação CPF/CNPJ** - Validação completa com dígitos verificadores e identificação de estado
- ✅ **Validação RG** - Incluindo dígitos verificadores para estados suportados
- ✅ **Validação IE (Inscrição Estadual)** - Por UF com algoritmos específicos de cada estado
- ✅ **Validação CNH** - Carteira Nacional de Habilitação
- ✅ **Validação Título de Eleitor**
- ✅ **Validação PIS/NIS/NIT/PASEP**

### 📞 Validação de Comunicação
- ✅ **Validação de Telefone** - Identificação de DDD, validação de formato e busca de estado
- ✅ **Validação de Email** - Validação de formato brasileiro com detecção de provedor

### 📍 Localização e Endereço
- ✅ **Validação de CEP** - Com ou sem consulta à API externa (ViaCEP)
- ✅ **Informações de DDD** - Busca de estado e cidade a partir de códigos DDD
- ✅ **Identificação de Estado** - A partir dos dois primeiros dígitos do CPF/CNPJ

### 👤 Informações Pessoais
- ✅ **Validação de Nome Completo** - Sem números ou caracteres inválidos, detecção de nomes brasileiros
- ✅ **Validação de Data de Nascimento** - Sem datas futuras ou pessoas com mais de 130 anos, cálculo de idade

### 🛠️ Funções Utilitárias
- ✅ **Aplicação de Máscaras** - Aplicar e remover máscaras (ex: 000.000.000-00, (11) 99999-9999)
- ✅ **Sanitização de Entrada** - Remover espaços e caracteres especiais inválidos
- ✅ **Formatação Reversa** - Transformar "(11) 91234-5678" em "11912345678"

---

## 📦 Instalação

### Node.js (npm)
```bash
npm install validbr
```
📦 **[Ver no npm](https://www.npmjs.com/package/validbr)**

### Python (pip)
```bash
pip install validbr
```
📦 **[Ver no PyPI](https://pypi.org/project/validbr/)**

### PHP (Composer)
```bash
composer require validbr/validbr
```
📦 **[Ver no Packagist](https://packagist.org/packages/validbr/validbr)**

---

## 🚀 Início Rápido

### Node.js
```javascript
const ValidBR = require('validbr');

// Validação de CPF
console.log(ValidBR.cpf.isValid('123.456.789-09')); // true
console.log(ValidBR.cpf.generate()); // Gerar CPF válido
console.log(ValidBR.cpf.getState('12345678909')); // 'São Paulo'

// Validação de telefone
console.log(ValidBR.phone.isValid('(11) 91234-5678')); // true
console.log(ValidBR.phone.getState('11')); // 'São Paulo'

// Aplicar máscara
console.log(ValidBR.cpf.applyMask('12345678909')); // '123.456.789-09'
console.log(ValidBR.phone.applyMask('11912345678')); // '(11) 91234-5678'
```

### Python
```python
from validbr import ValidBR

# Validação de CPF
print(ValidBR.cpf.is_valid('123.456.789-09'))  # True
print(ValidBR.cpf.generate())  # Gerar CPF válido
print(ValidBR.cpf.get_state('12345678909')); // 'São Paulo'

# Validação de telefone
print(ValidBR.phone.is_valid('(11) 91234-5678')); // true
print(ValidBR.phone.get_state('11')); // 'São Paulo'

# Aplicar máscara
print(ValidBR.cpf.apply_mask('12345678909')); // '123.456.789-09'
print(ValidBR.phone.apply_mask('11912345678')); // '(11) 91234-5678'
```

### PHP
```php
use ValidBR\ValidBR;

// Validação de CPF
echo ValidBR::cpf()->isValid('123.456.789-09') ? 'true' : 'false'; // true
echo ValidBR::cpf()->generate(); // Gerar CPF válido
echo ValidBR::cpf()->getState('12345678909'); // 'São Paulo'

// Validação de telefone
echo ValidBR::phone()->isValid('(11) 91234-5678') ? 'true' : 'false'; // true
echo ValidBR::phone()->getState('11'); // 'São Paulo'

# Aplicar máscara
echo ValidBR::cpf()->applyMask('12345678909'); // '123.456.789-09'
echo ValidBR::phone()->applyMask('11912345678'); // '(11) 91234-5678'
```

---

## 🤝 Como Contribuir

Aceitamos contribuições! Por favor, leia nosso [Guia de Contribuição](CONTRIBUTING.md) para detalhes sobre:

- Código de Conduta
- Como reportar bugs
- Como sugerir funcionalidades
- Como enviar pull requests
- Configuração de desenvolvimento

### Configuração de Desenvolvimento

1. Faça um fork do repositório
2. Clone seu fork
3. Crie uma branch para sua funcionalidade
4. Faça suas alterações
5. Adicione testes para nova funcionalidade
6. Execute todos os testes: `docker-compose up --build`
7. Envie um pull request

### Links Rápidos
- 📋 **[Guia de Contribuição](CONTRIBUTING.md)**
- 🐛 **[Template de Bug Report](.github/ISSUE_TEMPLATE/bug_report.md)**
- 💡 **[Template de Feature Request](.github/ISSUE_TEMPLATE/feature_request.md)**
- 🔄 **[Template de Pull Request](.github/pull_request_template.md)**

---

## 🆘 Suporte

- 📧 **Email**: julio@grupojpc.com.br
- 🐛 **Issues**: [GitHub Issues](https://github.com/validbr/validbr/issues)
- 📖 **Documentação**: [https://docs.validbr.com](https://docs.validbr.com)
- 💬 **Discussões**: [GitHub Discussions](https://github.com/validbr/validbr/discussions)
- 📱 **Discord**: [Entre em nossa comunidade](https://discord.gg/validbr)

---

<div align="center">
  <h3>⭐ Se este projeto te ajudou, considere dar uma estrela!</h3>
  
  <a href="https://github.com/validbr/validbr/stargazers">
    <img src="https://img.shields.io/github/stars/validbr/validbr?style=social" alt="GitHub stars">
  </a>
  
  <a href="https://github.com/validbr/validbr/network">
    <img src="https://img.shields.io/github/forks/validbr/validbr?style=social" alt="GitHub forks">
  </a>
</div> 


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/validbr/validbr",
    "name": "validbr",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": "brazil, validation, cpf, cnpj, cep, phone, email, rg, ie, ddd, mask, sanitize",
    "author": "ValidBR Team",
    "author_email": "julio@grupojpc.com.br",
    "download_url": "https://files.pythonhosted.org/packages/9c/e6/34368db4e3f2c47b5fc93583565e755c6cd1f00bf05ee1b1f74543b7483f/validbr-2.0.0.tar.gz",
    "platform": null,
    "description": "# ValidBR \ud83c\udde7\ud83c\uddf7\n\n[![npm version](https://badge.fury.io/js/validbr.svg)](https://www.npmjs.com/package/validbr)\n[![PyPI version](https://badge.fury.io/py/validbr.svg)](https://pypi.org/project/validbr/)\n[![Packagist version](https://img.shields.io/packagist/v/validbr/validbr.svg)](https://packagist.org/packages/validbr/validbr)\n[![Build Status](https://github.com/validbr/validbr/workflows/CI/badge.svg)](https://github.com/validbr/validbr/actions)\n[![Test Coverage](https://codecov.io/gh/validbr/validbr/branch/main/graph/badge.svg)](https://codecov.io/gh/validbr/validbr)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![GitHub stars](https://img.shields.io/github/stars/validbr/validbr)](https://github.com/validbr/validbr/stargazers)\n[![GitHub forks](https://img.shields.io/github/forks/validbr/validbr)](https://github.com/validbr/validbr/network)\n[![GitHub issues](https://img.shields.io/github/issues/validbr/validbr)](https://github.com/validbr/validbr/issues)\n[![GitHub pull requests](https://img.shields.io/github/issues-pr/validbr/validbr)](https://github.com/validbr/validbr/pulls)\n\n<div align=\"center\">\n  <img src=\"https://img.shields.io/badge/Node.js-\u2713-green?style=for-the-badge&logo=node.js\" alt=\"Node.js Support\">\n  <img src=\"https://img.shields.io/badge/Python-\u2713-green?style=for-the-badge&logo=python\" alt=\"Python Support\">\n  <img src=\"https://img.shields.io/badge/PHP-\u2713-green?style=for-the-badge&logo=php\" alt=\"PHP Support\">\n</div>\n\n---\n\n<div align=\"center\">\n  <h3>\ud83d\udce6 Available on Package Managers</h3>\n  \n  <a href=\"https://www.npmjs.com/package/validbr\">\n    <img src=\"https://img.shields.io/badge/npm-validbr-blue?style=for-the-badge&logo=npm\" alt=\"npm\">\n  </a>\n  \n  <a href=\"https://pypi.org/project/validbr/\">\n    <img src=\"https://img.shields.io/badge/PyPI-validbr-blue?style=for-the-badge&logo=pypi\" alt=\"PyPI\">\n  </a>\n  \n  <a href=\"https://packagist.org/packages/validbr/validbr\">\n    <img src=\"https://img.shields.io/badge/Packagist-validbr-blue?style=for-the-badge&logo=composer\" alt=\"Packagist\">\n  </a>\n</div>\n\n---\n\n## \ud83c\udf1f Live Demo\n\nTest all ValidBR features directly in your browser: **[\ud83d\ude80 Open Interactive Demo](demo.html)**\n\n> **\ud83d\udca1 Tip**: Open the `demo.html` file in your browser to test all ValidBR features interactively!\n\n---\n\n## \ud83d\udccb Table of Contents\n\n- [Overview](#overview)\n- [Features](#-features)\n- [Installation](#-installation)\n- [Quick Start](#-quick-start)\n- [Documentation](#-documentation)\n- [Testing](#-testing)\n- [Contributing](#-contributing)\n- [Support](#-support)\n- [License](#-license)\n\n---\n\n## \ud83d\udcd6 Overview\n\n**ValidBR** is a comprehensive Brazilian validation library available for **Node.js**, **Python**, and **PHP**. It provides robust validation for Brazilian documents, phone numbers, addresses, and personal information with advanced features like mask application, state identification, and data sanitization.\n\n### \ud83c\udfaf What ValidBR Validates\n\n- **\ud83d\udcc4 Documents**: CPF, CNPJ, RG, IE (State Registration), CNH, Voter ID (T\u00edtulo de Eleitor), PIS/NIS/NIT/PASEP\n- **\ud83d\udcde Communication**: Phone numbers, Email addresses\n- **\ud83d\udccd Location**: CEP (ZIP codes), DDD codes, State identification\n- **\ud83d\udc64 Personal**: Full names, Birth dates\n- **\ud83d\udee0\ufe0f Utilities**: Mask application/removal, Data sanitization\n\n---\n\n## \u2728 Features\n\n### \ud83d\udd10 Document Validation\n- \u2705 **CPF/CNPJ Validation** - Complete validation with check digits and state identification\n- \u2705 **RG Validation** - Including check digits for supported states\n- \u2705 **State Registration (IE) Validation** - By UF with state-specific algorithms\n- \u2705 **CNH Validation** - Brazilian Driver's License (CNH) validation\n- \u2705 **Voter ID (T\u00edtulo de Eleitor) Validation**\n- \u2705 **PIS/NIS/NIT/PASEP Validation**\n\n### \ud83d\udcde Communication Validation\n- \u2705 **Phone Number Validation** - DDD identification, phone format validation, and state lookup\n- \u2705 **Email Validation** - Brazilian email format validation with provider detection\n\n### \ud83d\udccd Location & Address\n- \u2705 **CEP Validation** - With or without external API consultation (ViaCEP)\n- \u2705 **DDD Information** - State and city lookup from DDD codes\n- \u2705 **State Identification** - From CPF/CNPJ first two digits\n\n### \ud83d\udc64 Personal Information\n- \u2705 **Full Name Validation** - No numbers or invalid characters, Brazilian name detection\n- \u2705 **Birth Date Validation** - No future dates or people over 130 years old, age calculation\n\n### \ud83d\udee0\ufe0f Utility Functions\n- \u2705 **Mask Application** - Apply and remove masks (e.g., 000.000.000-00, (11) 99999-9999)\n- \u2705 **Input Sanitization** - Remove spaces and invalid special characters\n- \u2705 **Reverse Formatting** - Transform \"(11) 91234-5678\" to \"11912345678\"\n\n---\n\n## \ud83d\udce6 Installation\n\n### Node.js (npm)\n```bash\nnpm install validbr\n```\n\ud83d\udce6 **[View on npm](https://www.npmjs.com/package/validbr)**\n\n### Python (pip)\n```bash\npip install validbr\n```\n\ud83d\udce6 **[View on PyPI](https://pypi.org/project/validbr/)**\n\n### PHP (Composer)\n```bash\ncomposer require validbr/validbr\n```\n\ud83d\udce6 **[View on Packagist](https://packagist.org/packages/validbr/validbr)**\n\n---\n\n## \ud83d\ude80 Quick Start\n\n### Node.js\n```javascript\nconst ValidBR = require('validbr');\n\n// CPF validation\nconsole.log(ValidBR.cpf.isValid('123.456.789-09')); // true\nconsole.log(ValidBR.cpf.generate()); // Generate valid CPF\nconsole.log(ValidBR.cpf.getState('12345678909')); // 'S\u00e3o Paulo'\n\n// CNH validation\nconsole.log(ValidBR.cnh.isValid('02650306461')); // true\nconsole.log(ValidBR.cnh.generate()); // Generate valid CNH\n\n// Voter ID validation\nconsole.log(ValidBR.tituloEleitor.isValid('123456789012')); // true\nconsole.log(ValidBR.tituloEleitor.generate()); // Generate valid Voter ID\n\n// PIS validation\nconsole.log(ValidBR.pis.isValid('123.45678.90-1')); // true\nconsole.log(ValidBR.pis.generate()); // Generate valid PIS\n\n// Phone validation\nconsole.log(ValidBR.phone.isValid('(11) 91234-5678')); // true\nconsole.log(ValidBR.phone.getState('11')); // 'S\u00e3o Paulo'\n\n// Apply mask\nconsole.log(ValidBR.cpf.applyMask('12345678909')); // '123.456.789-09'\nconsole.log(ValidBR.phone.applyMask('11912345678')); // '(11) 91234-5678'\n```\n\n### Python\n```python\nfrom validbr import validbr\n\n# CPF validation\nprint(validbr.cpf.is_valid('123.456.789-09'))  # True\nprint(validbr.cpf.generate())  # Generate valid CPF\nprint(validbr.cpf.get_state('12345678909')); // 'S\u00e3o Paulo'\n\n# CNH validation\nprint(validbr.cnh.is_valid('02650306461')) # True\nprint(validbr.cnh.generate()) # Generate valid CNH\n\n# Voter ID validation\nprint(validbr.titulo_eleitor.is_valid('123456789012')) # True\nprint(validbr.titulo_eleitor.generate()) # Generate valid Voter ID\n\n# PIS validation\nprint(validbr.pis.is_valid('123.45678.90-1')) # True\nprint(validbr.pis.generate()) # Generate valid PIS\n\n# Phone validation\nprint(validbr.phone.is_valid('(11) 91234-5678'));  # True\nprint(validbr.phone.get_state('11'));  # 'S\u00e3o Paulo'\n\n# Apply mask\nprint(validbr.cpf.apply_mask('12345678909'));  # '123.456.789-09'\nprint(validbr.phone.apply_mask('11912345678'));  # '(11) 91234-5678'\n```\n\n### PHP\n```php\nuse ValidBR\\ValidBR;\n\n// CPF validation\necho ValidBR::cpf()->isValid('123.456.789-09') ? 'true' : 'false'; // true\necho ValidBR::cpf()->generate(); // Generate valid CPF\necho ValidBR::cpf()->getState('12345678909'); // 'S\u00e3o Paulo'\n\n// CNH validation\necho ValidBR::cnh()->isValid('02650306461') ? 'true' : 'false'; // true\necho ValidBR::cnh()->generate(); // Generate valid CNH\n\n// Voter ID validation\necho ValidBR::tituloEleitor()->isValid('123456789012') ? 'true' : 'false'; // true\necho ValidBR::tituloEleitor()->generate(); // Generate valid Voter ID\n\n// PIS validation\necho ValidBR::pis()->isValid('123.45678.90-1') ? 'true' : 'false'; // true\necho ValidBR::pis()->generate(); // Generate valid PIS\n\n// Phone validation\necho ValidBR::phone()->isValid('(11) 91234-5678') ? 'true' : 'false'; // true\necho ValidBR::phone()->getState('11'); // 'S\u00e3o Paulo'\n\n// Apply mask\necho ValidBR::cpf()->applyMask('12345678909'); // '123.456.789-09'\necho ValidBR::phone()->applyMask('11912345678'); // '(11) 91234-5678'\n```\n\n---\n\n## \ud83d\udcda Documentation\n\n### CPF Validation\n```javascript\n// Node.js\nValidBR.cpf.isValid('123.456.789-09');        // true/false\nValidBR.cpf.generate();                        // Generate valid CPF\nValidBR.cpf.applyMask('12345678909');         // '123.456.789-09'\nValidBR.cpf.removeMask('123.456.789-09');     // '12345678909'\nValidBR.cpf.getState('12345678909');          // 'S\u00e3o Paulo'\n```\n\n### CNPJ Validation\n```javascript\n// Node.js\nValidBR.cnpj.isValid('12.345.678/0001-95');   // true/false\nValidBR.cnpj.generate();                       // Generate valid CNPJ\nValidBR.cnpj.applyMask('12345678000195');     // '12.345.678/0001-95'\nValidBR.cnpj.removeMask('12.345.678/0001-95'); // '12345678000195'\nValidBR.cnpj.getState('12345678000195');      // 'S\u00e3o Paulo'\n```\n\n### Phone Validation\n```javascript\n// Node.js\nValidBR.phone.isValid('(11) 91234-5678');     // true/false\nValidBR.phone.getDDD('(11) 91234-5678');      // '11'\nValidBR.phone.getState('11');                 // 'S\u00e3o Paulo'\nValidBR.phone.applyMask('11912345678');       // '(11) 91234-5678'\nValidBR.phone.removeMask('(11) 91234-5678');  // '11912345678'\nValidBR.phone.getValidDDDs();                 // Array of valid DDDs\n```\n\n### Email Validation\n```javascript\n// Node.js\nValidBR.email.isValid('user@example.com');    // true/false\nValidBR.email.sanitize(' user@example.com '); // 'user@example.com'\nValidBR.email.getDomain('user@example.com');  // 'example.com'\nValidBR.email.getUsername('user@example.com'); // 'user'\nValidBR.email.isBrazilianProvider('user@uol.com.br'); // true\n```\n\n### Name Validation\n```javascript\n// Node.js\nValidBR.fullName.isValid('Jo\u00e3o Silva Santos');    // true/false\nValidBR.fullName.sanitize('Jo\u00e3o Silva Santos  '); // 'Jo\u00e3o Silva Santos'\nValidBR.fullName.getFirstName('Jo\u00e3o Silva Santos'); // 'Jo\u00e3o'\nValidBR.fullName.getLastName('Jo\u00e3o Silva Santos');  // 'Santos'\nValidBR.fullName.getInitials('Jo\u00e3o Silva Santos');  // 'JSS'\nValidBR.fullName.hasCommonBrazilianName('Jo\u00e3o');   // true\n```\n\n### Birth Date Validation\n```javascript\n// Node.js\nValidBR.birthDate.isValid('1990-05-15');      // true/false\nValidBR.birthDate.getAge('1990-05-15');       // Current age\nValidBR.birthDate.isAdult('1990-05-15');      // true/false\nValidBR.birthDate.isElderly('1940-05-15');    // true/false\nValidBR.birthDate.isMinor('2010-05-15');      // true/false\nValidBR.birthDate.format('1990-05-15', 'DD/MM/YYYY'); // '15/05/1990'\nValidBR.birthDate.getZodiacSign('1990-05-15'); // 'Touro'\n```\n\n### CEP Validation\n```javascript\n// Node.js\nValidBR.cep.isValid('01234-567');             // true/false\nValidBR.cep.getInfo('01234-567');             // Get address info (async)\nValidBR.cep.applyMask('01234567');            // '01234-567'\nValidBR.cep.removeMask('01234-567');          // '01234567'\nValidBR.cep.getState('01234567');             // 'S\u00e3o Paulo'\nValidBR.cep.isFromSaoPaulo('01234567');       // true/false\nValidBR.cep.getRegion('01234567');            // 'Sudeste'\n```\n\n### RG Validation\n```javascript\n// Node.js\nValidBR.rg.isValid('12.345.678-9', 'SP');     // true/false (state required)\nValidBR.rg.applyMask('123456789');            // '12.345.678-9'\nValidBR.rg.removeMask('12.345.678-9');        // '123456789'\nValidBR.rg.generate('SP');                    // Generate valid RG for SP\nValidBR.rg.getValidStates();                  // Array of supported states\n```\n\n### State Registration (IE) Validation\n```javascript\n// Node.js\nValidBR.ie.isValid('123.456.789', 'SP');      // true/false\nValidBR.ie.applyMask('123.456.789', 'SP');      // '123.456.789'\nValidBR.ie.removeMask('123.456.789');         // '123456789'\nValidBR.ie.generate('SP');                    // Generate valid IE for SP\nValidBR.ie.getValidStates();                  // Array of supported states\n```\n\n### CNH Validation\n```javascript\n// Node.js\nValidBR.cnh.isValid('02650306461'); // true/false\nValidBR.cnh.generate(); // Generate valid CNH\nValidBR.cnh.applyMask('02650306461'); // '02650306461'\nValidBR.cnh.removeMask('02650306461'); // '02650306461'\n```\n\n### Voter ID (T\u00edtulo de Eleitor) Validation\n```javascript\n// Node.js\nValidBR.tituloEleitor.isValid('123456789012'); // true/false\nValidBR.tituloEleitor.generate(); // Generate valid Voter ID\nValidBR.tituloEleitor.applyMask('123456789012'); // '1234 5678 9012'\nValidBR.tituloEleitor.removeMask('1234 5678 9012'); // '123456789012'\n```\n\n### PIS/NIS/NIT/PASEP Validation\n```javascript\n// Node.js\nValidBR.pis.isValid('123.45678.90-1'); // true/false\nValidBR.pis.generate(); // Generate valid PIS\nValidBR.pis.applyMask('12345678901'); // '123.45678.90-1'\nValidBR.pis.removeMask('123.45678.90-1'); // '12345678901'\n```\n\n### Utility Functions\n```javascript\n// Node.js\nValidBR.sanitize('  test@example.com  ');     // 'test@example.com'\nValidBR.removeNonNumeric('abc123def456');     // '123456'\nValidBR.removeNonAlphabetic('Jo\u00e3o123Silva');  // 'Jo\u00e3oSilva'\n```\n\n---\n\n## \ud83e\uddea Testing\n\n### Run All Tests with Docker\n```bash\n# Navigate to docker directory\ncd docker\n\n# Run all tests\ndocker-compose up --build\n\n# Run tests for specific language\ndocker-compose run nodejs npm test\ndocker-compose run python python -m pytest\ndocker-compose run php composer test\n```\n\n### Run Tests Individually\n```bash\n# Node.js\ncd nodejs\nnpm install\nnpm test\n\n# Python\ncd python\npip install -e .\npython -m pytest\n\n# PHP\ncd php\ncomposer install\ncomposer test\n```\n\n### Test Coverage\n```bash\n# Node.js\nnpm run test:coverage\n\n# Python\npython -m pytest --cov=validbr\n\n# PHP\ncomposer test:coverage\n```\n\n---\n\n## \ud83c\udfaf Browser Testing\n\nOpen `demo.html` in your browser to test all ValidBR features interactively. The demo includes:\n\n- Real-time validation for all document types\n- Mask application and removal\n- State and region identification\n- Age calculation and zodiac signs\n- CEP information lookup\n- Input sanitization examples\n\n---\n\n## \ud83e\udd1d Contributing\n\nWe welcome contributions! Please read our [Contributing Guide](CONTRIBUTING.md) for details on:\n\n- Code of Conduct\n- How to report bugs\n- How to suggest features\n- How to submit pull requests\n- Development setup\n\n### Development Setup\n\n1. Fork the repository\n2. Clone your fork\n3. Create a feature branch\n4. Make your changes\n5. Add tests for new functionality\n6. Run all tests: `docker-compose up --build`\n7. Submit a pull request\n\n### Quick Links\n- \ud83d\udccb **[Contributing Guide](CONTRIBUTING.md)**\n- \ud83d\udc1b **[Bug Report Template](.github/ISSUE_TEMPLATE/bug_report.md)**\n- \ud83d\udca1 **[Feature Request Template](.github/ISSUE_TEMPLATE/feature_request.md)**\n- \ud83d\udd04 **[Pull Request Template](.github/pull_request_template.md)**\n\n---\n\n## \ud83d\udcc4 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n---\n\n## \ud83c\udd98 Support\n\n- \ud83d\udce7 **Email**: julio@grupojpc.com.br\n- \ud83d\udc1b **Issues**: [GitHub Issues](https://github.com/validbr/validbr/issues)\n- \ud83d\udcd6 **Documentation**: [https://docs.validbr.com](https://docs.validbr.com)\n- \ud83d\udcac **Discussions**: [GitHub Discussions](https://github.com/validbr/validbr/discussions)\n- \ud83d\udcf1 **Discord**: [Join our community](https://discord.gg/validbr)\n\n---\n\n## \ud83d\udcc8 Changelog\n\nSee [CHANGELOG.md](CHANGELOG.md) for version history and changes.\n\n---\n\n## \ud83c\udf1f Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=validbr/validbr&type=Date)](https://star-history.com/#validbr/validbr&Date)\n\n---\n\n## \ud83d\udcca Statistics\n\n![GitHub stars](https://img.shields.io/github/stars/validbr/validbr)\n![GitHub forks](https://img.shields.io/github/forks/validbr/validbr)\n![GitHub issues](https://img.shields.io/github/issues/validbr/validbr)\n![GitHub pull requests](https://img.shields.io/github/issues-pr/validbr/validbr)\n\n---\n\n## \ud83d\ude80 Publishing\n\nFor information on how to publish ValidBR to package repositories, see the [Publishing Guide](PUBLISH_GUIDE.md).\n\n### Publication Status\n- [x] **NPM**: Ready for publication\n- [x] **PyPI**: Ready for publication  \n- [x] **Packagist**: Ready for publication\n\n### Publishing Commands\n\n#### Using Automation Script (Recommended)\n```bash\n# Run all tests\n./publish.sh test\n\n# Publish to NPM\n./publish.sh npm\n\n# Publish to PyPI\n./publish.sh pypi\n\n# Check Packagist configuration\n./publish.sh packagist\n\n# Complete process (tests + publishing)\n./publish.sh all\n```\n\n#### Manual Commands\n```bash\n# NPM\ncd nodejs && npm publish\n\n# PyPI\ncd python && python setup.py sdist bdist_wheel && twine upload dist/*\n\n# Packagist\n# Connect Git repository to Packagist.org\n```\n\n---\n\n<div align=\"center\">\n  <h3>\ud83c\udde7\ud83c\uddf7 Vers\u00e3o em Portugu\u00eas</h3>\n</div>\n\n---\n\n## \ud83d\udcd6 Vis\u00e3o Geral\n\n**ValidBR** \u00e9 uma biblioteca abrangente de valida\u00e7\u00e3o brasileira dispon\u00edvel para **Node.js**, **Python** e **PHP**. Ela fornece valida\u00e7\u00e3o robusta para documentos brasileiros, n\u00fameros de telefone, endere\u00e7os e informa\u00e7\u00f5es pessoais com recursos avan\u00e7ados como aplica\u00e7\u00e3o de m\u00e1scaras, identifica\u00e7\u00e3o de estado e sanitiza\u00e7\u00e3o de dados.\n\n### \ud83c\udfaf O que o ValidBR Valida\n\n- **\ud83d\udcc4 Documentos**: CPF, CNPJ, RG, IE (Inscri\u00e7\u00e3o Estadual), CNH, T\u00edtulo de Eleitor, PIS/NIS/NIT/PASEP\n- **\ud83d\udcde Comunica\u00e7\u00e3o**: N\u00fameros de telefone, Endere\u00e7os de email\n- **\ud83d\udccd Localiza\u00e7\u00e3o**: CEP, C\u00f3digos DDD, Identifica\u00e7\u00e3o de estado\n- **\ud83d\udc64 Pessoal**: Nomes completos, Datas de nascimento\n- **\ud83d\udee0\ufe0f Utilit\u00e1rios**: Aplica\u00e7\u00e3o/remo\u00e7\u00e3o de m\u00e1scaras, Sanitiza\u00e7\u00e3o de dados\n\n---\n\n## \u2728 Funcionalidades\n\n### \ud83d\udd10 Valida\u00e7\u00e3o de Documentos\n- \u2705 **Valida\u00e7\u00e3o CPF/CNPJ** - Valida\u00e7\u00e3o completa com d\u00edgitos verificadores e identifica\u00e7\u00e3o de estado\n- \u2705 **Valida\u00e7\u00e3o RG** - Incluindo d\u00edgitos verificadores para estados suportados\n- \u2705 **Valida\u00e7\u00e3o IE (Inscri\u00e7\u00e3o Estadual)** - Por UF com algoritmos espec\u00edficos de cada estado\n- \u2705 **Valida\u00e7\u00e3o CNH** - Carteira Nacional de Habilita\u00e7\u00e3o\n- \u2705 **Valida\u00e7\u00e3o T\u00edtulo de Eleitor**\n- \u2705 **Valida\u00e7\u00e3o PIS/NIS/NIT/PASEP**\n\n### \ud83d\udcde Valida\u00e7\u00e3o de Comunica\u00e7\u00e3o\n- \u2705 **Valida\u00e7\u00e3o de Telefone** - Identifica\u00e7\u00e3o de DDD, valida\u00e7\u00e3o de formato e busca de estado\n- \u2705 **Valida\u00e7\u00e3o de Email** - Valida\u00e7\u00e3o de formato brasileiro com detec\u00e7\u00e3o de provedor\n\n### \ud83d\udccd Localiza\u00e7\u00e3o e Endere\u00e7o\n- \u2705 **Valida\u00e7\u00e3o de CEP** - Com ou sem consulta \u00e0 API externa (ViaCEP)\n- \u2705 **Informa\u00e7\u00f5es de DDD** - Busca de estado e cidade a partir de c\u00f3digos DDD\n- \u2705 **Identifica\u00e7\u00e3o de Estado** - A partir dos dois primeiros d\u00edgitos do CPF/CNPJ\n\n### \ud83d\udc64 Informa\u00e7\u00f5es Pessoais\n- \u2705 **Valida\u00e7\u00e3o de Nome Completo** - Sem n\u00fameros ou caracteres inv\u00e1lidos, detec\u00e7\u00e3o de nomes brasileiros\n- \u2705 **Valida\u00e7\u00e3o de Data de Nascimento** - Sem datas futuras ou pessoas com mais de 130 anos, c\u00e1lculo de idade\n\n### \ud83d\udee0\ufe0f Fun\u00e7\u00f5es Utilit\u00e1rias\n- \u2705 **Aplica\u00e7\u00e3o de M\u00e1scaras** - Aplicar e remover m\u00e1scaras (ex: 000.000.000-00, (11) 99999-9999)\n- \u2705 **Sanitiza\u00e7\u00e3o de Entrada** - Remover espa\u00e7os e caracteres especiais inv\u00e1lidos\n- \u2705 **Formata\u00e7\u00e3o Reversa** - Transformar \"(11) 91234-5678\" em \"11912345678\"\n\n---\n\n## \ud83d\udce6 Instala\u00e7\u00e3o\n\n### Node.js (npm)\n```bash\nnpm install validbr\n```\n\ud83d\udce6 **[Ver no npm](https://www.npmjs.com/package/validbr)**\n\n### Python (pip)\n```bash\npip install validbr\n```\n\ud83d\udce6 **[Ver no PyPI](https://pypi.org/project/validbr/)**\n\n### PHP (Composer)\n```bash\ncomposer require validbr/validbr\n```\n\ud83d\udce6 **[Ver no Packagist](https://packagist.org/packages/validbr/validbr)**\n\n---\n\n## \ud83d\ude80 In\u00edcio R\u00e1pido\n\n### Node.js\n```javascript\nconst ValidBR = require('validbr');\n\n// Valida\u00e7\u00e3o de CPF\nconsole.log(ValidBR.cpf.isValid('123.456.789-09')); // true\nconsole.log(ValidBR.cpf.generate()); // Gerar CPF v\u00e1lido\nconsole.log(ValidBR.cpf.getState('12345678909')); // 'S\u00e3o Paulo'\n\n// Valida\u00e7\u00e3o de telefone\nconsole.log(ValidBR.phone.isValid('(11) 91234-5678')); // true\nconsole.log(ValidBR.phone.getState('11')); // 'S\u00e3o Paulo'\n\n// Aplicar m\u00e1scara\nconsole.log(ValidBR.cpf.applyMask('12345678909')); // '123.456.789-09'\nconsole.log(ValidBR.phone.applyMask('11912345678')); // '(11) 91234-5678'\n```\n\n### Python\n```python\nfrom validbr import ValidBR\n\n# Valida\u00e7\u00e3o de CPF\nprint(ValidBR.cpf.is_valid('123.456.789-09'))  # True\nprint(ValidBR.cpf.generate())  # Gerar CPF v\u00e1lido\nprint(ValidBR.cpf.get_state('12345678909')); // 'S\u00e3o Paulo'\n\n# Valida\u00e7\u00e3o de telefone\nprint(ValidBR.phone.is_valid('(11) 91234-5678')); // true\nprint(ValidBR.phone.get_state('11')); // 'S\u00e3o Paulo'\n\n# Aplicar m\u00e1scara\nprint(ValidBR.cpf.apply_mask('12345678909')); // '123.456.789-09'\nprint(ValidBR.phone.apply_mask('11912345678')); // '(11) 91234-5678'\n```\n\n### PHP\n```php\nuse ValidBR\\ValidBR;\n\n// Valida\u00e7\u00e3o de CPF\necho ValidBR::cpf()->isValid('123.456.789-09') ? 'true' : 'false'; // true\necho ValidBR::cpf()->generate(); // Gerar CPF v\u00e1lido\necho ValidBR::cpf()->getState('12345678909'); // 'S\u00e3o Paulo'\n\n// Valida\u00e7\u00e3o de telefone\necho ValidBR::phone()->isValid('(11) 91234-5678') ? 'true' : 'false'; // true\necho ValidBR::phone()->getState('11'); // 'S\u00e3o Paulo'\n\n# Aplicar m\u00e1scara\necho ValidBR::cpf()->applyMask('12345678909'); // '123.456.789-09'\necho ValidBR::phone()->applyMask('11912345678'); // '(11) 91234-5678'\n```\n\n---\n\n## \ud83e\udd1d Como Contribuir\n\nAceitamos contribui\u00e7\u00f5es! Por favor, leia nosso [Guia de Contribui\u00e7\u00e3o](CONTRIBUTING.md) para detalhes sobre:\n\n- C\u00f3digo de Conduta\n- Como reportar bugs\n- Como sugerir funcionalidades\n- Como enviar pull requests\n- Configura\u00e7\u00e3o de desenvolvimento\n\n### Configura\u00e7\u00e3o de Desenvolvimento\n\n1. Fa\u00e7a um fork do reposit\u00f3rio\n2. Clone seu fork\n3. Crie uma branch para sua funcionalidade\n4. Fa\u00e7a suas altera\u00e7\u00f5es\n5. Adicione testes para nova funcionalidade\n6. Execute todos os testes: `docker-compose up --build`\n7. Envie um pull request\n\n### Links R\u00e1pidos\n- \ud83d\udccb **[Guia de Contribui\u00e7\u00e3o](CONTRIBUTING.md)**\n- \ud83d\udc1b **[Template de Bug Report](.github/ISSUE_TEMPLATE/bug_report.md)**\n- \ud83d\udca1 **[Template de Feature Request](.github/ISSUE_TEMPLATE/feature_request.md)**\n- \ud83d\udd04 **[Template de Pull Request](.github/pull_request_template.md)**\n\n---\n\n## \ud83c\udd98 Suporte\n\n- \ud83d\udce7 **Email**: julio@grupojpc.com.br\n- \ud83d\udc1b **Issues**: [GitHub Issues](https://github.com/validbr/validbr/issues)\n- \ud83d\udcd6 **Documenta\u00e7\u00e3o**: [https://docs.validbr.com](https://docs.validbr.com)\n- \ud83d\udcac **Discuss\u00f5es**: [GitHub Discussions](https://github.com/validbr/validbr/discussions)\n- \ud83d\udcf1 **Discord**: [Entre em nossa comunidade](https://discord.gg/validbr)\n\n---\n\n<div align=\"center\">\n  <h3>\u2b50 Se este projeto te ajudou, considere dar uma estrela!</h3>\n  \n  <a href=\"https://github.com/validbr/validbr/stargazers\">\n    <img src=\"https://img.shields.io/github/stars/validbr/validbr?style=social\" alt=\"GitHub stars\">\n  </a>\n  \n  <a href=\"https://github.com/validbr/validbr/network\">\n    <img src=\"https://img.shields.io/github/forks/validbr/validbr?style=social\" alt=\"GitHub forks\">\n  </a>\n</div> \n\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A comprehensive Brazilian validation library for Python",
    "version": "2.0.0",
    "project_urls": {
        "Bug Reports": "https://github.com/validbr/validbr/issues",
        "Documentation": "https://docs.validbr.com",
        "Homepage": "https://github.com/validbr/validbr",
        "Source": "https://github.com/validbr/validbr"
    },
    "split_keywords": [
        "brazil",
        " validation",
        " cpf",
        " cnpj",
        " cep",
        " phone",
        " email",
        " rg",
        " ie",
        " ddd",
        " mask",
        " sanitize"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "032842cbd50005b4a9210cf928b9a9077931ab8268bfaed51c0167f3696635cb",
                "md5": "621c94b64bbcf02e5826c767f8fa00f0",
                "sha256": "7b6830568b5e503c744915b0f968d74f4e89c6534e2d4f031bb6eb4feca579d4"
            },
            "downloads": -1,
            "filename": "validbr-2.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "621c94b64bbcf02e5826c767f8fa00f0",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 8122,
            "upload_time": "2025-08-09T02:51:42",
            "upload_time_iso_8601": "2025-08-09T02:51:42.091954Z",
            "url": "https://files.pythonhosted.org/packages/03/28/42cbd50005b4a9210cf928b9a9077931ab8268bfaed51c0167f3696635cb/validbr-2.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9ce634368db4e3f2c47b5fc93583565e755c6cd1f00bf05ee1b1f74543b7483f",
                "md5": "5d8f2b01c6772207e94280e76cc64913",
                "sha256": "de5aad427e1d49c38a7288bf9a7ecd6c0053600ee42727132f6e98f7ee8fbc2f"
            },
            "downloads": -1,
            "filename": "validbr-2.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "5d8f2b01c6772207e94280e76cc64913",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 13381,
            "upload_time": "2025-08-09T02:51:43",
            "upload_time_iso_8601": "2025-08-09T02:51:43.650033Z",
            "url": "https://files.pythonhosted.org/packages/9c/e6/34368db4e3f2c47b5fc93583565e755c6cd1f00bf05ee1b1f74543b7483f/validbr-2.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-09 02:51:43",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "validbr",
    "github_project": "validbr",
    "github_not_found": true,
    "lcname": "validbr"
}
        
Elapsed time: 1.88218s