PHPackages                             casilhero/brazilian-validators - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Validation &amp; Sanitization](/categories/validation)
4. /
5. casilhero/brazilian-validators

ActiveLibrary[Validation &amp; Sanitization](/categories/validation)

casilhero/brazilian-validators
==============================

Reusable Brazilian validators for PHP projects.

v1.2.0(1mo ago)0175↑75%1MITPHPPHP ^8.1CI passing

Since Apr 15Pushed 1mo agoCompare

[ Source](https://github.com/Casilhero/brazilian-validators)[ Packagist](https://packagist.org/packages/casilhero/brazilian-validators)[ RSS](/packages/casilhero-brazilian-validators/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (2)Versions (4)Used By (1)

casilhero/brazilian-validators
==============================

[](#casilherobrazilian-validators)

Biblioteca PHP para validação de documentos e identificadores brasileiros. Sem dependência de framework — funciona em qualquer projeto PHP puro, Laravel, Symfony, etc.

> Veja também as versões para outros ambientes: [Laravel](https://github.com/Casilhero/brazilian-validators-laravel) · [JavaScript / TypeScript](https://github.com/Casilhero/brazilian-validators-javascript)

Requisitos
----------

[](#requisitos)

- PHP `^8.1`

Instalação
----------

[](#instalação)

```
composer require casilhero/brazilian-validators
```

Validadores disponíveis
-----------------------

[](#validadores-disponíveis)

ValidadorClasseDescriçãoCPF`Validators\Cpf`Valida CPF com dígito verificadorCNPJ`Validators\Cnpj`Valida CNPJ com dígito verificadorCPF ou CNPJ`Validators\CpfCnpj`Detecta o tipo e valida automaticamenteSUFRAMA`Validators\Suframa`Valida inscrição SUFRAMANIS/PIS`Validators\NisPis`Valida NIS/PIS com dígito verificadorTelefone BR`Validators\Phone`Valida DDD + número local (8 ou 9 dígitos)Telefone BR com DDI`Validators\PhoneDdi`Exige prefixo `55` + validação nacionalCNH`Validators\Cnh`Valida CNH pelos dois dígitos verificadoresCNS`Validators\Cns`Valida Cartão Nacional de SaúdeRENAVAM`Validators\Renavam`Valida RENAVAM com dígito verificadorChassi`Validators\Chassi`Valida número de chassi (padrão VIN)Título de Eleitor`Validators\TituloEleitor`Valida título de eleitor (8, 9 ou 10 dígitos)Inscrição Estadual`Validators\InscricaoEstadual`Valida IE de todos os 26 estados + DF (ver tabela abaixo)Certidão`Validators\Certidao`Valida número de certidão do Registro Civil (CNJ, 32 dígitos)Passaporte`Validators\Passaporte`Valida passaporte brasileiro (2 letras + 6 dígitos)CAEPF`Validators\Caepf`Valida CAEPF (Cadastro de Atividade Econômica da Pessoa Física)Processo Judicial`Validators\ProcessoJudicial`Valida número CNJ (Res. 65/2008): `NNNNNNN-DD.AAAA.J.TR.OOOO`Boleto`Validators\Boleto`Valida boleto bancário (47 dígitos) e de arrecadação (48 dígitos)### Inscrição Estadual — estados suportados

[](#inscrição-estadual--estados-suportados)

Os algoritmos foram verificados individualmente contra os roteiros oficiais de crítica publicados pelo [SINTEGRA](https://www.sintegra.gov.br/insc_est.html).

UFTamanhoObservaçõesAC13 dígitosPrefixo `01`; 2 DVs (mod 11)AL9 dígitosPrefixo `24`; 1 DV (mod 11)AM9 dígitos1 DV (mod 11)AP9 dígitosPrefixo `03`; 1 DV (mod 11); regras especiais para faixas `03000840`–`03017600`BA8 ou 9 dígitos2 DVs; módulo 10 ou 11 conforme 1º dígito (8d) ou 2º dígito (9d)CE9 dígitos1 DV (mod 11)DF13 dígitosPrefixo `07`; 2 DVs (mod 11, ciclo 2–9)ES9 dígitos1 DV (mod 11)GO9 dígitosPrefixos `10`, `11` ou `20`–`29`; 1 DV (mod 11)MA9 dígitosPrefixo `12`; 1 DV (mod 11)MG13 dígitos2 DVs; DV1 com soma de algarismos dos produtos (pesos 1×2); DV2 (mod 11, ciclo 3–11)MS9 dígitosPrefixo `28` ou `50`; 1 DV (mod 11)MT11 dígitos1 DV (mod 11, ciclo 3–9)PA9 dígitosPrefixos `15`, `75`–`79`; 1 DV (mod 11)PB9 dígitos1 DV (mod 11)PE9 dígitos (novo)2 DVs (mod 11)PE14 dígitos (antigo CACEPE)1 DV (mod 11, ciclo 1–9); &gt;9 → −10PI9 dígitos1 DV (mod 11)PR10 dígitos2 DVs (mod 11, pesos ciclo 2–7)RJ8 dígitos1 DV (mod 11, pesos 2,7,6,5,4,3,2)RN9 ou 10 dígitosPrefixo `20`; 1 DV via `(soma×10) % 11`RO9 dígitos (antigo) ou 14 dígitos (novo)1 DV (mod 11); &gt;10 → −10RR9 dígitosPrefixo `24`; 1 DV (soma × posições 1–8) mod 9RS10 dígitos1 DV (mod 11, ciclo 2–9)SC9 dígitos1 DV (mod 11); resto &lt; 2 → 0SE9 dígitos1 DV (mod 11); ≥ 10 → 0SP12 dígitos (padrão)2 DVs; pesos 1,3,4,5,6,7,8,10 e 3,2,10,9,8,7,6,5,4,3,2; resto % 10SP13 caracteres `P…` (produtor rural)1 DV; mesmos pesos do DV1 padrão; resto % 10TO11 dígitosPosições 3–4 indicam tipo (`01`/`02`/`03`/`99`) e não entram no cálculo; 1 DV (mod 11)> Referência técnica: [SINTEGRA — Roteiros de Crítica da Inscrição Estadual](https://www.sintegra.gov.br/insc_est.html)

API
---

[](#api)

Todos os validadores expõem os seguintes métodos estáticos:

```
// Validação
Cnpj::isValid(string $value): bool
Cnpj::validate(string $value): ValidationResult

// Geração de dados de teste (retorna string sem máscara)
Cnpj::generate(): string

// Aplicação de máscara ao valor limpo
Cnpj::mask(string $value): string
```

> **Nota:** `InscricaoEstadual` não implementa `generate()` nem `mask()` por depender de algoritmos específicos por UF. Os métodos `Certidao::parse()` e `Boleto::parse()` estão disponíveis para extrair os campos estruturados do número (ver exemplos).

### `ValidationResult`

[](#validationresult)

Retornado por `validate()`. Útil quando você precisa do motivo da reprovação.

```
$result = Suframa::validate('001234567');

$result->isValid(); // bool
$result->code();    // string|null — código de erro (veja abaixo)
$result->context(); // array — dados extras do erro
```

### Códigos de erro

[](#códigos-de-erro)

CódigoSignificado`invalid_length`Tamanho incorreto`invalid_format`Formato não reconhecido`invalid_checksum`Dígito verificador inválido`invalid_region`Região/DDD/tribunal inválido`invalid_prefix`Prefixo não permitido### `BrazilianValidator` — façade estática central

[](#brazilianvalidator--façade-estática-central)

Agrega todos os validadores em uma única classe para uso centralizado:

```
use Casilhero\BrazilianValidators\BrazilianValidator;

// Retorno bool
BrazilianValidator::cpf('529.982.247-25');
BrazilianValidator::cnpj('04.252.011/0001-10');
BrazilianValidator::cpfCnpj('04.252.011/0001-10');
BrazilianValidator::suframa('010234567');
BrazilianValidator::nisPis('12345678919');
BrazilianValidator::phone('(11) 98765-4321');
BrazilianValidator::phoneDdi('5511987654321');
BrazilianValidator::cnh('12345678900');
BrazilianValidator::cns('700009600073');
BrazilianValidator::renavam('77077411168');
BrazilianValidator::chassi('9BWZZZ377VT004251');
BrazilianValidator::tituloEleitor('123456789012');
BrazilianValidator::inscricaoEstadual('110042490114', 'SP');
BrazilianValidator::certidao('10514 01 55 2024 1 00001 092 0000250-28');
BrazilianValidator::passaporte('AB123456');
BrazilianValidator::caepf('132.574.492/00-1');
BrazilianValidator::processoJudicial('0000001-41.2024.8.01.0001');
BrazilianValidator::boleto('34191.79001 01043.510047 91020.150008 2 85480000000000');

// Retorno ValidationResult (sufixo Result)
$result = BrazilianValidator::cpfResult('11111111111');
if (! $result->isValid()) {
    echo $result->code(); // invalid_format
}

// Geração de dados de teste
$cpf    = BrazilianValidator::cpfGenerate();                // ex: '52998224725'
$cnpj   = BrazilianValidator::cnpjGenerate();               // ex: '04252011000110'
$phone  = BrazilianValidator::phoneGenerate();              // ex: '11987654321'
$cnh    = BrazilianValidator::cnhGenerate();                // ex: '12345678900'
$proc   = BrazilianValidator::processoJudicialGenerate();   // ex: '00000014120248010001'
$boleto = BrazilianValidator::boletoGenerate();             // ex: '34191790010104351004791020150008285480000000000'
// demais: cpfCnpjGenerate, suframaGenerate, nisPisGenerate, phoneDdiGenerate,
//         cnsGenerate, renavamGenerate, chassiGenerate, tituloEleitorGenerate,
//         certidaoGenerate, passaporteGenerate, caepfGenerate

// Aplicação de máscara
$maskedCpf    = BrazilianValidator::cpfMask('52998224725');    // '529.982.247-25'
$maskedCnpj   = BrazilianValidator::cnpjMask('04252011000110'); // '04.252.011/0001-10'
$maskedPhone  = BrazilianValidator::phoneMask('11987654321');  // '(11) 98765-4321'
$maskedBoleto = BrazilianValidator::boletoMask('34191790010104351004791020150008285480000000000');
//   '34191.79001 01043.510047 91020.150008 2 85480000000000'
$maskedProc   = BrazilianValidator::processoJudicialMask('00000014120248010001');
//   '0000001-41.2024.8.01.0001'
// demais: cpfCnpjMask, suframaMask, nisPisMask, phoneDdiMask, cnhMask,
//         renavamMask, chassiMask, tituloEleitorMask, certidaoMask,
//         passaporteMask, caepfMask

// Parse (extrai campos estruturados)
$certidaoInfo = BrazilianValidator::certidaoParse('10514 01 55 2024 1 00001 092 0000250-28');
$certidaoInfo?->codigoServentia;  // '10514'
$certidaoInfo?->ano;              // 2024
$certidaoInfo?->descricaoLivro(); // 'Livro A (Nascimento)'

$boletoInfo = BrazilianValidator::boletoParse('00190000090114971860168524522114675860000102656');
$boletoInfo?->type;            // 'bancario'
$boletoInfo?->bankCode;        // '001'
$boletoInfo?->amount;          // 102656
$boletoInfo?->amountInReals(); // 1026.56
$boletoInfo?->expirationDate;  // \DateTimeImmutable
```

Exemplos
--------

[](#exemplos)

### Validação simples

[](#validação-simples)

```
use Casilhero\BrazilianValidators\Validators\Cnpj;

if (! Cnpj::isValid($request->cnpj)) {
    throw new \InvalidArgumentException('CNPJ inválido.');
}
```

### Validação com retorno detalhado

[](#validação-com-retorno-detalhado)

```
use Casilhero\BrazilianValidators\Validators\Cns;

$result = Cns::validate($input);

if (! $result->isValid()) {
    logger()->warning('CNS inválido', ['code' => $result->code()]);
}
```

### Geração de dados de teste

[](#geração-de-dados-de-teste)

```
use Casilhero\BrazilianValidators\Validators\Cpf;
use Casilhero\BrazilianValidators\Validators\ProcessoJudicial;

$cpf  = Cpf::generate();               // '52998224725' (sem máscara)
$cpfF = Cpf::mask(Cpf::generate());    // '529.982.247-25' (com máscara)
$proc = ProcessoJudicial::generate();  // '00000014120248010001'
$procF = ProcessoJudicial::mask($proc); // '0000001-41.2024.8.01.0001'
```

### Parse de certidão

[](#parse-de-certidão)

```
use Casilhero\BrazilianValidators\Validators\Certidao;

$info = Certidao::parse('10514 01 55 2024 1 00001 092 0000250-28');
$info?->codigoServentia;  // '10514'
$info?->codigoAcervo;     // '01'
$info?->ano;              // 2024
$info?->tipoLivro;        // 1
$info?->descricaoLivro(); // 'Livro A (Nascimento)'
$info?->toArray();        // array com todos os campos
```

### Parse de boleto

[](#parse-de-boleto)

```
use Casilhero\BrazilianValidators\Validators\Boleto;

$info = Boleto::parse('00190000090114971860168524522114675860000102656');
$info?->type;            // 'bancario'
$info?->bankCode;        // '001'
$info?->amount;          // 102656
$info?->amountInReals(); // 1026.56
$info?->expirationDate;  // \DateTimeImmutable('2018-07-15')
```

Compatibilidade
---------------

[](#compatibilidade)

ComponenteVersão suportadaPHP`^8.1` (inclui 8.2, 8.3, 8.4 e 8.5)FrameworkQualquer (ou PHP puro)Laravelvia [casilhero/brazilian-validators-laravel](https://github.com/Casilhero/brazilian-validators-laravel)Testes
------

[](#testes)

```
composer test            # executa a suíte Pest
composer test:coverage   # executa com relatório de cobertura (mínimo 90%)
composer format          # aplica Laravel Pint
composer format:check    # verifica formatação sem alterar arquivos
```

Versionamento
-------------

[](#versionamento)

Segue [SemVer](https://semver.org/lang/pt-BR/):

- `MAJOR` — quebra de compatibilidade na API pública
- `MINOR` — novas funcionalidades compatíveis com versões anteriores
- `PATCH` — correções sem quebra de contrato

Licença
-------

[](#licença)

MIT

###  Health Score

41

—

FairBetter than 87% of packages

Maintenance89

Actively maintained with recent releases

Popularity15

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity44

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1 days

Total

3

Last Release

53d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/5770e231eeadfeb91c75b0db69ae811b491d59b63181ebc12bb113c2f8dde787?d=identicon)[andrenunes01](/maintainers/andrenunes01)

---

Top Contributors

[![andrenunes01](https://avatars.githubusercontent.com/u/20850517?v=4)](https://github.com/andrenunes01 "andrenunes01 (1 commits)")

---

Tags

laravelvalidationbrazilcpfcnpj

###  Code Quality

TestsPest

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/casilhero-brazilian-validators/health.svg)

```
[![Health](https://phpackages.com/badges/casilhero-brazilian-validators/health.svg)](https://phpackages.com/packages/casilhero-brazilian-validators)
```

###  Alternatives

[robersonfaria/validation

Pacote Laravel para validações comuns ao Brasil(pt-BR) tipo: CNPJ,CPF,CEP,CNS

107.6k](/packages/robersonfaria-validation)[bissolli/validador-cpf-cnpj

Classe em PHP para validação de CPF e CNPJ.

2193.2k](/packages/bissolli-validador-cpf-cnpj)[yiibr/yii2-br-validator

Provide validations and features for brazilian localization

14105.8k4](/packages/yiibr-yii2-br-validator)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
