Pular para o conteúdo

Como testar um sistema que pede CNPJ

Todo sistema brasileiro tem as mesmas três linhas de código para CNPJ: uma limpeza que tira tudo que não é algarismo, um teste que exige 14 algarismos e um campo que guarda o documento como número. As três funcionaram por vinte e cinco anos. Com o CNPJ alfanumérico, as três quebram — e nós medimos o tamanho do estrago em 20.000 números gerados aqui.

O que acontece com 10.000 números de cada formato

PerguntaFormato antigoFormato novo
começa com zero — some se o campo virar número1.004 · 10%263 · 2,6%
tem pelo menos uma letra0 · 0%10.000 · 100%
passa no teste de formato antigo (catorze algarismos)10.000 · 100%0 · 0%
continua inteiro depois da limpeza antiga10.000 · 100%0 · 0%
sobrevive a virar número e voltar a texto8.996 · 90%0 · 0%

Os números saem do mesmo módulo que o gerador daqui usa, com sorteio de semente fixa: rodando o build em outra máquina, esta tabela dá exatamente isto de novo. É uma amostra do espaço de CNPJs possíveis, não das empresas que existem. Conferido em 9 de agosto de 2026.

A limpeza de uma linha, e por que ela é o pior dos três

É esta, e você já escreveu ela: cnpj.replace(/\D/g, ""). Tira ponto, barra e traço, deixa os algarismos. Com o CNPJ numérico ela está certa. Com o alfanumérico, ela come as letras junto.

O estrago médio, nos 10.000 números do formato novo: 8,69 das 14 posições desaparecem. No melhor caso somem 3; no pior, 12 — sobram só os dois dígitos verificadores e mais nada.

E aqui está o motivo de este ser o defeito mais caro dos três: ele não esvazia o campo. Ele encurta. O que sobra continua sendo uma sequência de algarismos, com cara de documento, e passa por qualquer verificação do tipo “o usuário preencheu?”. Um campo vazio aparece no mesmo dia; um campo com meio CNPJ vira cadastro errado, nota emitida errada e conciliação que não fecha três meses depois — quando ninguém mais liga o problema à mudança.

A correção é uma linha também: tire só o que é pontuação da máscara, em vez de manter só o que é algarismo. Uma lista do que sai é sempre mais segura que uma lista do que fica.

O teste de formato que recusa 100% dos números novos

O segundo trecho clássico é o ^\d{14}$, ou a versão com máscara. Dos 10.000 CNPJs do formato novo, nenhum passa nele — nem um. Não é uma faixa de casos raros: as 12 primeiras posições sorteiam de um alfabeto de 36 caracteres, então um CNPJ novo que saia só com algarismos é raridade estatística. Na nossa amostra, os 10.000 tinham pelo menos uma letra.

O detalhe cruel é que esse teste falha do lado seguro: ele recusa. Quem tem esse regex vai receber reclamação de cliente dizendo “meu CNPJ não é aceito”, o que é ruim, mas é visível. Já a limpeza da seção anterior aceita, e mente.

O campo que trata documento como número

O terceiro é o mais antigo de todos e não nasceu com o formato novo: guardar CNPJ em coluna numérica, ou deixar o JSON mandar o valor sem aspas. Dos 10.000 CNPJs do formato ANTIGO, 1.004 começam com zero — 10% —, e o zero da frente some quando o texto vira número. Só 8.996 sobrevivem à viagem de ida e volta.

Com o formato novo isso deixa de ser perda silenciosa e vira erro aberto: um CNPJ com letra não vira número nenhum. É, de longe, a melhor notícia deste artigo — o defeito que estava escondido há décadas passa a aparecer.

Documento não é número. Não se soma, não se ordena por grandeza, não se compara com >. É texto de tamanho fixo que por acaso usava só algarismos.

A coluna de 14 e a máscara de 18

O CNPJ cru tem 14 posições; com a pontuação da máscara, 18. Um campo dimensionado para o número limpo recebe, um dia, o número pontuado — de um CSV, de uma integração, de alguém colando do sistema do contador. Aí o banco corta em silêncio ou recusa a gravação, e o erro aparece longe de onde nasceu.

Decida onde a máscara vive — e o normal é que ela viva só na tela. Guarde cru, mostre pontuado. É a mesma escolha que o gerador daqui faz: ele mantém as 14 posições e aplica os pontos na hora de desenhar, e é por isso que marcar a caixinha de pontuação reformata o MESMO número em vez de sortear outro.

O roteiro: os números para colar no seu teste

Quatro casos cobrem quase tudo que o seu formulário precisa aguentar. Os três primeiros são públicos e oficiais; o último é o desta casa.

NúmeroCom máscaraPor que este
12ABC34501DE3512.ABC.345/01DE-35o exemplo publicado pela Receita para o formato novo
00000000E08G1200.000.000/E08G-12o primeiro CNPJ alfanumérico emitido de verdade, em 31/07/2026
0000000000019100.000.000/0001-91matriz do Banco do Brasil — o formato de sempre, que continua válido
3521168500010835.211.685/0001-08o CNPJ deste site, e o caso de resto menor que 2

A máscara desta tabela não foi digitada: sai da mesma função que a ferramenta usa. Se ela quebrar para letras, esta tabela quebra o build junto.

Mais cinco coisas para colar

  • O mesmo CNPJ em minúsculas. A regra oficial fala em letras maiúsculas, mas gente cola o que copiou — o validador daqui converte e avisa que converteu.
  • O mesmo CNPJ com o traço do Word (–, en dash) no lugar do hífen. Ele é trocado sozinho pelo editor e é indistinguível a olho nu.
  • Um CNPJ com espaço invisível no fim, do tipo que vem colado de PDF e de planilha.
  • Catorze zeros. Essa sequência fecha a conta do módulo 11 e mesmo assim não é CNPJ de ninguém — é o caso que separa “a aritmética passou” de “o número existe”.
  • Uma filial: mesma raiz, ordem diferente de 4 posições. Sistema que assume que todo cliente é matriz descobre isso tarde.

O que não mudou, e é o que salva a migração

Continua tendo 14 posições. A máscara é a mesma. Os dois últimos caracteres continuam sendo algarismos, sempre — letra em dígito verificador é erro de quem acabou de descobrir que o formato existe. E a conta do dígito é a mesma para os dois formatos, porque ela sempre trabalhou com o valor do caractere, não com o algarismo.

Ou seja: não existem dois CNPJs, existe um só, com um alfabeto maior nas doze primeiras posições. Quem escrever a validação uma vez, do jeito certo, atende os dois. Como a conta funciona por dentro está em CNPJ alfanumérico: o que muda e o que quebra.

Onde isso te pega fora do formulário

O campo de cadastro é a parte visível. O que costuma sangrar depois é o resto do caminho: a planilha que o financeiro abre e o Excel reformata, o CSV que a integração exporta, a chave estrangeira que alguém declarou como número inteiro anos atrás, o índice único que vai comparar “com máscara” e “sem máscara” como se fossem duas empresas, e o relatório que ordena CNPJ como se ordem numérica quisesse dizer alguma coisa.

Vale rodar um teste antes de precisar: pegue uns 20 números gerados no formato novo e mande pelo caminho inteiro — cadastro, gravação, exportação, importação e relatório. O que quebrar, quebra agora, com número inventado, e não depois com cliente real.