npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

validation-br

v1.4.5

Published

Brazilian personal documents validation - cpf, cnpj, titulo, pis/pasep, cnh, renavam, processos judiciais, protocolo federal, código de rastreamento dos correios

Downloads

10,382

Readme

validation-br

Biblioteca de validação de documentos pessoais do Brasil com suporte a CPF, CNPJ, Título Eleitoral, PIS/PASEP, CNH. 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.

Validation-BR também permite criação de números fake para facilitar o desenvolvimento e testes, além de aplicar máscaras e calcular somente os dígitos verificadores.

Instalação

# Usando yarn
yarn add validation-br

## OU
# Usando npm
npm install validation-br

Importação

Importação direta

Permite realizar diretamente uma validação a partir do objeto principal

// Modules
const { isCPF, isCNPJ } = require('validation-br')

// ES6
import { isCPF, isCNPJ } from 'validation-br'

Importação de submódulos

Importando os submódulos, é possível criar máscaras, números fake para testes de desenvolvimento e calcular dígitos verificadores.

Exemplos

// ES6
import { dv, fake, mask, validate } from 'validation-br/dist/cpf'
// ou
import * as cpf from 'validation-br/dist/cpf'

// CommonJS
const cpf = require('validation-br/dist/cpf')
const { dv, fake, mask, validate } = require('validation-br/dist/cpf')

// Calculo do dígito verificador de um CPF. Os métodos aceitam inteiros e strings, inclusive com máscaras.
cpf.dv(906259666) // -> '51'
cpf.dv('906259666') // -> '51'
cpf.dv('906.259.666') // -> '51'

// Cria um número fake de CPF para fins de testes.
cpf.fake() // -> 90625966651
// Passe um parâmetro true para gerar o número com máscara
cpf.fake(true) // -> 906.259.666-51

// Aplique uma máscara a um cpf
cpf.mask(90625966651) // -> 906.259.666-51

// Valida um número
cpf.validate('01234567890') // -> true

// Valida um número e retorna exceção se a validação falhar
cpf.validateOrFail('01234567890') // -> true

Tabela de Conteúdo

Funções de Validação

  • isCNH - Validação do CNH
  • isCPF - Validação do CPF
  • isCNPJ - Validação do CNPJ
  • isNUP17 - Validação de Número Unificado de Protocolo do Governo Federal
  • isJudicialProcess - Validação de Números de Processos Judiciais
  • isPIS - Validação de PIS, PASEP, NIS e NIT
  • isPostalCode - Validação de Objetos Registrados dos Correios
  • isRenavam - Validação de RENAVAM
  • isTituloEleitor - Validação do Título de Eleitor

Usando em outras bibliotecas de validação

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.

  • Vuelidate - Usado para validação de estado no vuejs
  • Class-Validator - Usado em nest, typeorm E mais uma infinidade de frameworks
  • Indicative - Indicative é a biblioteca padrão de validação usada no Adonis.
  • Joi - Joi é um validador de esquemas usado em aplicações node, react, vue etc.
  • Yup - Yup é usado para validar estado em aplicações react.

isCNH( value )

Valida o documento da carteira nacional de habilitação.

// Importação somente da validação
import { isCNH } from 'validation-br'
// ou
// Importação do submódulo
import { validate, mask } from 'validation-br/dist/cnh'
// ou
import * as cnh from 'validation-br/dist/cnh'

// Valida
isCNH('69044271146') //-> true
isCNH('62472927637') //-> true
isCNH('46190476839') //-> false
cnh.validate('62472927637') //-> true
cnh.validateOrFail('62472927637') //-> true

// Número fake com e sem máscara
cnh.fake() // -> 62472927637
cnh.fake(true) // -> 624729276-37

// Aplica uma máscara
cnh.mask('62472927637') // -> 624729276-37

// Calcula o DV
cnh.dv('624729276') // -> '37'

isCNPJ( value )

Valida um CNPJ

// Importação somente da validação
import { isCNPJ } from 'validation-br'
// ou
// Importação do submódulo
import { validate, mask } from 'validation-br/dist/cnpj'
// ou
import * as cnpj from 'validation-br/dist/cnpj'

// Valida
isCNPJ('73.797.980/0001-79') //-> true
isCNPJ('55585709000198') //-> true
isCNPJ('99362238000180') //-> false
cnpj.validate('99362238000180') //-> true
cnpj.validateOrFail('99362238000180') //-> true

// Número fake com e sem máscara
cnpj.fake() // -> 55585709000198
cnpj.fake(true) // -> 55.585.709/0001-98

// Aplica uma máscara
cnpj.mask('99362238000180') // -> 99.362.238/0001-80

// Calcula o DV
cnpj.dv('993622380001') // -> '80'

isCPF( value )

Valida um CPF

// Importação somente da validação
import { isCPF } from 'validation-br'
// ou
// Importação do submódulo
import { validate, mask } from 'validation-br/dist/cpf'
// ou
import * as cpf from 'validation-br/dist/cpf'

// Valida
isCPF('01234567890') //-> true
isCPF('012.345.678-90') //-> true
isCPF('01234567891') //-> false
cpf.validate('01234567890') //-> true
cpf.validateOrFail('01234567890') //-> true

// Número fake com e sem máscara
cpf.fake() // -> 01234567891
cpf.fake(true) // -> 012.345.678-91

// Aplica uma máscara
cpf.mask('01234567890') // -> 012.345.678-90

// Calcula o DV
cpf.dv('012345678') // -> '90'

isJudicialProcess( value )

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:

  1. Número sequencial dado pelo órgão de registro, reiniciado a cada ano, com até 7 caracteres

  2. Dígito verificador com 2 caracteres

  3. Ano de registro com 4 caracteres

  4. Órgão do poder judiciário com 1 caractere, sendo eles:

    • 1 - Supremo Tribunal Federal
    • 2 - Conselho Nacional de Justiça
    • 3 - Superior Tribunal de Justiça
    • 4 - Justiça Federal
    • 5 - Justiça do Trabalho
    • 6 - Justiça Eleitoral
    • 7 - Justiça Militar da União
    • 8 - Justiça dos Estados e do Distrito Federal e Territórios
    • 9 - Justiça Militar Estadual
  5. Tribunal do segmento do poder judiciário com 2 caracteres

  6. Código da unidade de origem do processo com 4 caracteres

// Importação somente da validação
import { isJudicialProcess } from 'validation-br'
// ou
// Importação do submódulo
import { validate, mask } from 'validation-br/dist/judicialProcess'
// ou
import * as judicialProcess from 'validation-br/dist/judicialProcess'

// Valida
isJudicialProcess('20802520125150049') //-> true
isJudicialProcess('0011006-07.2016.8.20.0100') //-> true
isJudicialProcess('00110060720168200101') //-> false
judicialProcess.validate('00110060720168200100') //-> true
judicialProcess.validateOrFail('00110060720168200100') //-> true

// Número fake com e sem máscara
judicialProcess.fake() // -> 00110060720168200100
judicialProcess.fake(true) // -> 0011006-07.2016.8.20.0100

// Aplica uma máscara
judicialProcess.mask('00110060720168200100') // -> 0011006-07.2016.8.20.0100

// 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.
judicialProcess.dv('001100620168200100') // -> '07'

isNUP17( value )

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.

  1. Os primeiros 5 dígitos correspondem código do órgão
  2. Os dígitos de 6 a 11 são um número sequencial dado pelo órgão em questão e é reiniciado a cada ano
  3. Os dígitos 12 a 15 representam o ano de registro do protocolo
  4. Os caracteres 16 a 17 são o dígito verificador
// Importação somente da validação
import { isNUP17 } from 'validation-br'
// ou
// Importação do submódulo
import { validate, mask } from 'validation-br/dist/nup17'
// ou
import * as nup from 'validation-br/dist/nup17'

// Valida
isNUP17('23037001462202165') //-> true
isNUP17('23037.001462/2021-65') //-> true
isNUP17('23037.001462/2021-66') //-> false
nup.validate('23037.001462/2021-65') //-> true
nup.validateOrFail('23037.001462/2021-65') //-> true

// Número fake com e sem máscara
nup.fake() // -> 71282677380
nup.fake(true) // -> 712.82677.38-0

// Aplica uma máscara
nup.mask('23037001462202165') // -> 23037.001462/2021-65

// Calcula o DV
nup.dv('230370014622021') // -> '65'

isPIS( value )

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 somente da validação
import { isPIS } from 'validation-br'
// ou
// Importação do submódulo
import { validate, mask } from 'validation-br/dist/pisPasep'
// ou
import * as pis from 'validation-br/dist/pisPasep'

// Valida
isPIS('71282677380') //-> true
isPIS('237.95126.95-5') //-> true
isPIS('500.12973.80-1') //-> false
pis.validate('71282677380') //-> true
pis.validateOrFail('71282677380') //-> true

// Número fake com e sem máscara
pis.fake() // -> 71282677380
pis.fake(true) // -> 712.82677.38-0

// Aplica uma máscara
pis.mask('71282677380') // -> 712.82677.38-0

// Calcula o DV
pis.dv('7128267738') // -> '0'

isPostalCode( value )

Valida um código de rastreamento de objetos postais no formato XX00000000DYY, onde:

  • XX: O código do objeto postal com 2 dígitos;
  • 00000000: Número sequencial do objeto com 8 dígitos;
  • D: Dígito Verificador
  • YY: País de origem do objeto com 2 dígitos.
// Importação somente da validação
import { isPostalCode } from 'validation-br'
// ou
// Importação do submódulo
import { validate, mask } from 'validation-br/dist/postalCode'
// ou
import * as postalCode from 'validation-br/dist/postalCode'

// Valida
isPostalCode('PN718252423BR') //-> true
isPostalCode('RY728187035CN') //-> true
isPostalCode('JT194624698BR') //-> false
postalCode.validate('PN718252423BR') //-> true
postalCode.validateOrFail('PN718252423BR') //-> true

// Número fake com e sem máscara.
postalCode.fake() // -> PN718252423BR
postalCode.fake(true) // -> PN718252423BR

// Aplica uma máscara
// No caso de PostalCode, a máscara apenas coloca as letras em maiúsculas
postalCode.mask('pn718252423br') // -> PN718252423BR

// Calcula o DV
postalCode.dv('PN718252423BR') // -> '3'

isRenavam( value )

Valida o número de um RENAVAM de 11 dígitos

// Importação somente da validação
import { isRenavam } from 'validation-br'
// ou
// Importação do submódulo
import { validate, mask } from 'validation-br/dist/renavam'
// ou
import * as renavam from 'validation-br/dist/renavam'

// Valida
isRenavam('14283256656') //-> true
isRenavam('95059845976') //-> true
isRenavam('67747331626') //-> false
renavam.validate('95059845976') //-> true
renavam.validateOrFail('95059845976') //-> true

// Número fake com e sem máscara
renavam.fake() // -> 95059845976
renavam.fake(true) // -> 9505984597-6

// Aplica uma máscara
renavam.mask('95059845976') // -> 9505984597-6

// Calcula o DV
renavam.dv('950598459') // -> '76'

isTituloEleitor( value )

Valida um título eleitoral

// Importação somente da validação
import { isTituloEleitor } from 'validation-br'
// ou
// Importação do submódulo
import { validate, mask } from 'validation-br/dist/tituloEleitor'
// ou
import * as titulo from 'validation-br/dist/tituloEleitor'

// Valida
isTituloEleitor('743650641660') //-> true
isTituloEleitor('525028881694') //-> true
isTituloEleitor('153016161686') //-> false
titulo.validate('01234567890') //-> true
titulo.validateOrFail('01234567890') //-> true

// Número fake com e sem máscara
titulo.fake() // -> 153016161686
titulo.fake(true) // -> 1530.1616.1686

// Aplica uma máscara
titulo.mask('525028881694') // -> 5250.2888.1694

// Calcula o DV
titulo.dv('5250288816') // -> '94'

Testes

Todos os testes passando com 100% de cobertura

Testes passando com 100% de cobertura

Github Actions

Github actions executados nas versões 12, 14, 16, 18 e 20 do Node.

Github actions executados nas versões 12, 14, 16, 18 e 20 do Node

Changelog

  • 16/12/2023:
    • 1.4.5
      • Corrige o caminho da definição dos types. (Thanks @ishigami)
  • 30/12/2022:
    • 1.4.4
      • Correção de bug quando o documento válido tinha caracteres adicionais
      • Refatoração de clearValue() para comportar configurações opcionais
  • 01/10/2022:
    • 1.4.1
      • Correção na importação principal dos módulos
      • Refatoração do isJudicialProcess para permitir 100% de cobertura dos testes
      • Inclusão de mais testes unitários para atingir 100% de cobertura
  • 10/01/2022:
    • 1.1.0 - Adicionado NUP17 - Número Unificado de Protocolo de 17 dígitos do Governo Federal
  • 09/01/2022:
    • 1.0.0 - Biblioteca convertida para Typescript e testes convertidos para Jest
  • 08/01/2022:
    • 0.21.1 - Adicionadas as funções isRenavam e isJudicialProcess
  • 16/09/2021:
    • 0.5.0 - Adicionadas as funções isCPF, isCNPJ e isTituloEleitor
    • 0.7.0 - Adicionadas as funções isPostalCode e isCNH
    • 0.8.0 - Adicionada a função isPIS

Referências