Como o JavaScript Aprendeu a Validar Documentos Brasileiros

CPF, CNPJ, PIS/PASEP, título de eleitor, inscrição estadual — cada documento brasileiro tem um algoritmo próprio de validação. E todos eles foram implementados em JavaScript por desenvolvedores que precisavam dessas validações nos seus sistemas.

Essa história explica como a mesma lógica que protege seu cadastro bancário agora funciona como ferramenta pública para qualquer pessoa.

O problema original

Imagine que você é um desenvolvedor construindo um sistema de e-commerce em 2010. O formulário de cadastro pede CPF. Você precisa:

  1. Verificar se o número tem 11 dígitos
  2. Rejeitar sequências inválidas (11111111111, 00000000000)
  3. Calcular os dois dígitos verificadores e comparar com os informados
  4. Dar feedback instantâneo ao usuário, sem esperar consulta ao servidor

Esse último ponto é crucial. Consultar a Receita Federal a cada digitação seria lento e proibibitamente caro. A validação algorítmica resolve: se os dígitos verificadores batem, o CPF é sintaticamente válido. Não confirma que existe — confirma que foi digitado corretamente.

As bibliotecas que surgiram

Desenvolvedores brasileiros criaram dezenas de bibliotecas para resolver esse problema:

| Biblioteca | Downloads npm | O que valida | |-----------|---------------|-------------| | cpf-cnpj-validator | 2M+/mês | CPF e CNPJ | | @brazilian-utils/brazilian-utils | 500K+/mês | CPF, CNPJ, CEP, telefone, PIS, título eleitor | | validar-cpf | 300K+/mês | CPF | | br-validations | 100K+/mês | CPF, CNPJ, IE, PIS/PASEP |

Essas bibliotecas são usadas em produção por bancos, fintechs, e-commerces e sistemas governamentais. O código é aberto, auditável e testado por milhões de execuções diárias.

O algoritmo por trás

Cada documento brasileiro usa uma variação do mesmo princípio: dígitos verificadores calculados por módulo 11 (ou módulo 10, no caso do código de barras).

CPF — 2 dígitos verificadores

Nove dígitos base → multiplicação por pesos → soma → módulo 11 → primeiro verificador. Repete com 10 dígitos → segundo verificador.

CNPJ — 2 dígitos verificadores

Doze dígitos base (8 de raiz + 4 de ordem) → multiplicação por pesos diferentes do CPF → módulo 11 → verificadores.

PIS/PASEP — 1 dígito verificador

Dez dígitos base → multiplicação por pesos (3,2,9,8,7,6,5,4,3,2) → módulo 11.

Inscrição Estadual — varia por estado

Cada estado tem regras próprias. São Paulo usa módulo 11 com 12 dígitos. Minas Gerais usa dois módulos diferentes. Bahia usa módulo 10 para alguns casos. Uma biblioteca de IE completa precisa implementar 27 variações.

De validação para geração

O passo de "validar" para "gerar" é logicamente inverso e trivial: em vez de receber 11 dígitos e conferir os verificadores, você gera 9 dígitos aleatórios e calcula os verificadores corretos.

O resultado é um número que passa em qualquer validação algorítmica, mas não existe no banco de dados da Receita Federal. Perfeito para testes de software — e inútil para fraude, já que qualquer consulta real ao CPF/CNPJ retornaria "não encontrado".

A transição para ferramentas públicas

O que aconteceu foi natural: se a lógica de validação e geração já existia em JavaScript, e JavaScript roda em qualquer navegador, por que não disponibilizar essas funções como ferramentas web?

Um desenvolvedor que precisava testar seu sistema precisava abrir o terminal, instalar a biblioteca via npm e rodar um script. Agora ele abre uma aba, gera o CPF e cola no formulário. 10 segundos.

Um profissional de QA que precisava de 50 CNPJs para testar uma importação em lote? Mesma ferramenta, mesmo navegador, 30 segundos.

O que construímos no Stimuli

Nossos geradores e validadores de documentos brasileiros usam exatamente os mesmos algoritmos que as bibliotecas npm mais populares. A diferença é a interface: em vez de require('cpf-cnpj-validator'), você tem um campo de texto e um botão.

A lógica é idêntica. A confiabilidade é idêntica. O acesso é universal.