Acabei de lançar a versão 2.0 do validation-br, uma biblioteca em TypeScript para validar documentos brasileiros: CPF, CNPJ (numérico e alfanumérico), CEP, Boleto, chave Pix, Pix Copia e Cola, Título de Eleitor, PIS/PASEP, CNH, RENAVAM e mais uma dezena de outros formatos.
A grande mudança da 2.0 é a forma como a validação funciona: cada documento agora é uma classe imutável, no estilo value object. Em vez de chamar uma função que devolve true ou false, você instancia o documento e ele já nasce validado.
import { CPF } from 'validation-br/cpf';
const cpf = new CPF('906.259.666-51');
cpf.value // -> '90625966651', o valor normalizado, sem máscara
cpf.mask() // -> '906.259.666-51'
Se o valor for inválido, o construtor lança uma exceção em vez de devolver false. Isso deixa o fluxo mais explícito: ou você tem um CPF de verdade em mãos, ou você trata o erro. Pra quem só quer um booleano rápido, os atalhos isCPF, isCNPJ etc. continuam existindo e funcionando exatamente como antes.
Um ponto que considero importante: o pacote não tem nenhuma dependência em produção. Zero. Só usa APIs nativas do JS/TS, o que significa um node_modules mais enxuto e uma superfície de ataque bem menor pra quem se preocupa com supply chain.
Exemplo: CNPJ alfanumérico
Desde 2026 a Receita Federal aceita CNPJ com letras no corpo do número (mantendo os dois últimos dígitos verificadores sempre numéricos). O validation-br já suporta isso, inclusive pra gerar exemplos fake pra teste:
import { CNPJ } from 'validation-br/cnpj';
// Gera um CNPJ alfanumérico de exemplo
CNPJ.fake({ alphanumeric: true }).mask();
// -> 'WX.BC2.1FX/0001-00'
new CNPJ('WX.BC2.1FX/0001-00').value;
// -> 'WXBC21FX000100', o valor normalizado
A mesma classe calcula o dígito verificador, aplica e remove máscara, e gera valores fake válidos, tanto no formato numérico tradicional quanto no alfanumérico novo.
Onde encontrar
- Site e documentação completa: https://validation-br.js.org
- Código no GitHub: https://github.com/klawdyo/validation-br
- Instalação:
npm install validation-br
This article was originally published by DEV Community and written by Claudio Medeiros.
Read original article on DEV Community