
Security News
GitHub Actions Pricing Whiplash: Self-Hosted Actions Billing Change Postponed
GitHub postponed a new billing model for self-hosted Actions after developer pushback, but moved forward with hosted runner price cuts on January 1.
validation-br
Advanced tools
Brazilian personal documents validation - cpf, cnpj, titulo, pis/pasep, cnh, renavam, processos judiciais, protocolo federal, código de rastreamento dos correios
A primeira biblioteca a inserir o suporte ao CNPJ alfanumérico
Biblioteca de validação de documentos pessoais do Brasil com suporte a CPF, CNPJ (numérico e alfanumérico), Título Eleitoral, PIS/PASEP, CNH.
Validation-BR também valida numerações de outros tipos de registros como RENAVAM, Processos Judiciais, Número de Protocolo do Governo Federal e Objetos registrados de Rastreamento dos Correios, além de permitir a criação de números fake para facilitar o desenvolvimento e testes, aplicar máscaras e calcular somente os dígitos verificadores.
# Usando yarn
yarn add validation-br
# Usando npm
npm install validation-br
// Modules
const { isCPF, isCNPJ } = require('validation-br');
// ES6 - Importação a partir do objeto principal
import { isCPF, isCNPJ } from 'validation-br';
Importando os submódulos, é possível criar máscaras, números fake para testes de desenvolvimento e calcular dígitos verificadores.
As funções dos exemplos abaixo se aplicam a todos os tipos de documentos.
// Importação direta
import { isCPF } from 'validation-br';
isCPF('01234567890'); // -> true
isCPF('01234567891'); // -> false
// Importe de submódulos
import { dv, fake, mask, validate } from 'validation-br/dist/cpf';
// Calculo do dígito verificador de um CPF. Os métodos aceitam inteiros e strings, inclusive com máscaras.
dv(906259666); // -> '51'
dv('906259666'); // -> '51'
dv('906.259.666'); // -> '51'
// Cria um número fake de CPF para fins de testes.
fake(); // -> 90625966651
// Passe um parâmetro true para gerar o número com máscara
fake(true); // -> 906.259.666-51
// Aplique uma máscara a um cpf
mask(90625966651); // -> 906.259.666-51
// Normalize o número do documento
normalize('906.259.666-51'); // -> 90625966651
// Valida um número e retorna exceção se a validação falhar
validateOrFail('01234567890'); // -> true
Validation-BR pode ser utilizado em conjunto com quaisquer bibliotecas de validação que permita estender seus métodos.
Abaixo seguem alguns exemplos. Sinta-se convidado a adicionar a sua biblioteca favorita em nosso wiki.
Valida o documento da carteira nacional de habilitação.
// Importação direta
import { isCNH } from 'validation-br';
isCNH('69044271146'); //-> true
isCNH('62472927637'); //-> true
isCNH('46190476839'); //-> false
// Importação do submódulo
import { validate, mask, normalize, fake, dv } from 'validation-br/dist/cnh';
// Valida
validate('624729276-37'); //-> true
validateOrFail('62472927637'); //-> true
// Número fake com e sem máscara
fake(); // -> 62472927637
fake(true); // -> 624729276-37
// Aplica uma máscara
mask('62472927637'); // -> 624729276-37
// Normalize o número do documento
normalize('624729276-37'); // -> 62472927637
// Calcula o DV
dv('624729276'); // -> '37'
Valida um CNPJ numérico e alfanumérico.
Primeira biblioteca a inserir o suporte ao CNPJ alfanumérico.
A partir da Nota Técnica conjunta COCAD/SUARA/RFB nº 49 de 14 de maio de 2024, os números de CNPJ poderão ser alfanuméricos. A alteração entra em uso em 2026.
// Importação direta
import { isCNPJ } from 'validation-br';
isCNPJ('73.797.980/0001-79'); //-> true
isCNPJ('55585709000198'); //-> true
isCNPJ('99362238000180'); //-> false
// ou
// Importação do submódulo
import { validate, mask, dv, normalize, fake, validateOrFail } from 'validation-br/dist/cnpj';
// Valida
validate('99362238000180'); //-> true
validateOrFail('99362238000180'); //-> true
// Número fake com e sem máscara
fake(); // -> 55585709000198
fake(true); // -> 55.585.709/0001-98
fake({ withMask: true }); // -> 55.585.709/0001-98
fake({ withMask: true, alphanumeric: true }); // -> A1.222.333/0001-50
fake({ withMask: false, alphanumeric: true }); // -> A1222333/0001-50
// Aplica uma máscara
mask('99362238000180'); // -> 99.362.238/0001-80
// Normalize o número do documento
normalize('99.362.238/0001-80'); // -> 99362238000180
// Calcula o DV
dv('993622380001'); // -> '80'
Valida um CPF
// Importação direta
import { isCPF } from 'validation-br';
isCPF('01234567890'); //-> true
isCPF('012.345.678-90'); //-> true
isCPF('01234567891'); //-> false
// ou
// Importação do submódulo
import { validate, mask, dv, normalize, fake, validateOrFail } from 'validation-br/dist/cpf';
// Valida
validate('01234567890'); //-> true
validateOrFail('01234567890'); //-> true
// Número fake com e sem máscara
fake(); // -> 01234567891
fake(true); // -> 012.345.678-91
// Aplica uma máscara
mask('01234567890'); // -> 012.345.678-90
// Normalize o número do documento
normalize('012.345.678-90'); // -> 01234567890
// Calcula o DV
dv('012345678'); // -> '90'
Valida números de processo da esfera judicial. Esta padronização foi adotada em 2010 e de lá para cá todos os processos judiciais abertos no país seguem o mesmo padrão, seja eleitoral, cível, militar etc.
O número é composto por 6 partes:
Número sequencial dado pelo órgão de registro, reiniciado a cada ano, com até 7 caracteres
Dígito verificador com 2 caracteres
Ano de registro com 4 caracteres
Órgão do poder judiciário com 1 caractere, sendo eles:
Tribunal do segmento do poder judiciário com 2 caracteres
Código da unidade de origem do processo com 4 caracteres
// Importação direta
import { isJudicialProcess } from 'validation-br';
isJudicialProcess('20802520125150049'); //-> true
isJudicialProcess('0011006-07.2016.8.20.0100'); //-> true
isJudicialProcess('00110060720168200101'); //-> false
// Importação do submódulo
import {
validate,
mask,
dv,
normalize,
fake,
validateOrFail,
} from 'validation-br/dist/judicialProcess';
validate('00110060720168200100'); //-> true
validateOrFail('00110060720168200100'); //-> true
// Número fake com e sem máscara
fake(); // -> 00110060720168200100
fake(true); // -> 0011006-07.2016.8.20.0100
// Aplica uma máscara
mask('00110060720168200100'); // -> 0011006-07.2016.8.20.0100
// Normalize o número do documento
normalize('0011006-07.2016.8.20.0100'); // -> 00110060720168200100
// Calcula o DV.
// Obs.: Antes do cálculo, é necessário que o número do processo não possua o dígito verificador para que o resultado seja correto. Isso é necessário pois o DV fica no meio da numeração, na posição 8 e 9.
dv('001100620168200100'); // -> '07'
Válida um Número Unificado de Protocolo de 17 dígitos. Esta numeração é usada pelo Governo Federal como forma única de numerar processos em todas os órgãos do executivo.
// Importação direta
import { isNUP17 } from 'validation-br';
isNUP17('23037001462202165'); //-> true
isNUP17('23037.001462/2021-65'); //-> true
isNUP17('23037.001462/2021-66'); //-> false
// ou
// Importação do submódulo
import { validate, mask, dv, normalize, fake, validateOrFail } from 'validation-br/dist/nup17';
// Valida
validate('23037.001462/2021-65'); //-> true
validateOrFail('23037.001462/2021-65'); //-> true
// Número fake com e sem máscara
fake(); // -> 23037001462202165
fake(true); // -> 23037.001462/2021-65
// Aplica uma máscara
mask('23037001462202165'); // -> 23037.001462/2021-65
// Normalize o número do documento
normalize('23037.001462/2021-65'); // -> 23037001462202165
// Calcula o DV
dv('230370014622021'); // -> '65'
Valida códigos PIS, PASEP, NIS e NIT, que usam o mesmo algoritmo. Aceita números com e sem pontos e traços.
// Importação direta
import { isPIS } from 'validation-br';
isPIS('71282677380'); //-> true
isPIS('237.95126.95-5'); //-> true
isPIS('500.12973.80-1'); //-> false
// ou
// Importação do submódulo
import { validate, mask, dv, normalize, fake, validateOrFail } from 'validation-br/dist/pisPasep';
// Valida
validate('71282677380'); //-> true
validateOrFail('71282677380'); //-> true
// Número fake com e sem máscara
fake(); // -> 71282677380
fake(true); // -> 712.82677.38-0
// Normalize o número do documento
normalize('712.82677.38-0'); // -> 71282677380
// Aplica uma máscara
mask('71282677380'); // -> 712.82677.38-0
// Calcula o DV
dv('7128267738'); // -> '0'
Valida um código de rastreamento de objetos postais no formato XX00000000DYY, onde:
// Importação direta
import { isPostalCode } from 'validation-br';
isPostalCode('PN718252423BR'); //-> true
isPostalCode('RY728187035CN'); //-> true
isPostalCode('JT194624698BR'); //-> false
// ou
// Importação do submódulo
import { validate, mask, dv, normalize, fake, validateOrFail } from 'validation-br/dist/postalCode';
// Valida
validate('PN718252423BR'); //-> true
validateOrFail('PN718252423BR'); //-> true
// Número fake com e sem máscara.
fake(); // -> PN718252423BR
fake(true); // -> PN718252423BR
// Aplica uma máscara
// No caso de PostalCode, a máscara apenas coloca as letras em maiúsculas, servindo como normalização
mask('pn718252423br'); // -> PN718252423BR
// Normalize o número do documento
normalize('pn718252423br'); // -> PN718252423BR
// Calcula o DV
dv('PN718252423BR'); // -> '3'
Valida o número de um RENAVAM de 11 dígitos
// Importação direta
import { isRenavam } from 'validation-br';
isRenavam('14283256656'); //-> true
isRenavam('95059845976'); //-> true
isRenavam('67747331626'); //-> false
// ou
// Importação do submódulo
import { validate, mask, dv, normalize, fake, validateOrFail } from 'validation-br/dist/renavam';
// Valida
validate('95059845976'); //-> true
validateOrFail('95059845976'); //-> true
// Número fake com e sem máscara
fake(); // -> 95059845976
fake(true); // -> 9505984597-6
// Normaliza o número do documento
normalize('9505984597-6'); // -> 95059845976
// Aplica uma máscara
mask('95059845976'); // -> 9505984597-6
// Calcula o DV
dv('950598459'); // -> '76'
Valida um título eleitoral
// Importação direta
import { isTituloEleitor } from 'validation-br';
isTituloEleitor('743650641660'); //-> true
isTituloEleitor('525028881694'); //-> true
isTituloEleitor('153016161686'); //-> false
// Importação do submódulo
import {
validate,
mask,
dv,
normalize,
fake,
validateOrFail,
} from 'validation-br/dist/tituloEleitor';
// Valida
validate('01234567890'); //-> true
validateOrFail('01234567890'); //-> true
// Número fake com e sem máscara
fake(); // -> 153016161686
fake(true); // -> 1530.1616.1686
// Normalize o número do documento
normalize('1530.1616.1686'); // -> 153016161686
// Aplica uma máscara
mask('525028881694'); // -> 5250.2888.1694
// Calcula o DV
dv('5250288816'); // -> '94'
Todos os testes passando com 100% de cobertura
Github actions executados nas versões 18, 20 e 22 do Node.
clearValue() para comportar configurações opcionaisFAQs
Brazilian personal documents validation - cpf, cnpj, titulo, pis/pasep, cnh, renavam, processos judiciais, protocolo federal, código de rastreamento dos correios
We found that validation-br demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
GitHub postponed a new billing model for self-hosted Actions after developer pushback, but moved forward with hosted runner price cuts on January 1.

Research
Destructive malware is rising across open source registries, using delays and kill switches to wipe code, break builds, and disrupt CI/CD.

Security News
Socket CTO Ahmad Nassri shares practical AI coding techniques, tools, and team workflows, plus what still feels noisy and why shipping remains human-led.