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
| Pergunta | Formato antigo | Formato novo |
|---|---|---|
| começa com zero — some se o campo virar número | 1.004 · 10% | 263 · 2,6% |
| tem pelo menos uma letra | 0 · 0% | 10.000 · 100% |
| passa no teste de formato antigo (catorze algarismos) | 10.000 · 100% | 0 · 0% |
| continua inteiro depois da limpeza antiga | 10.000 · 100% | 0 · 0% |
| sobrevive a virar número e voltar a texto | 8.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úmero | Com máscara | Por que este |
|---|---|---|
| 12ABC34501DE35 | 12.ABC.345/01DE-35 | o exemplo publicado pela Receita para o formato novo |
| 00000000E08G12 | 00.000.000/E08G-12 | o primeiro CNPJ alfanumérico emitido de verdade, em 31/07/2026 |
| 00000000000191 | 00.000.000/0001-91 | matriz do Banco do Brasil — o formato de sempre, que continua válido |
| 35211685000108 | 35.211.685/0001-08 | o 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.