O que o validador confere
Validar um CNPJ é verificar se o número é estruturalmente possível. O validador desta página segue, nesta ordem, as mesmas checagens que a API e a função mostrada mais abaixo fazem, e que um back-end atualizado para o CNPJ alfanumérico deveria fazer:
- Caracteres. Ponto, barra, hífen e espaços são tratados como separadores e descartados, e minúsculas viram maiúsculas. Os dois últimos caracteres, que são os dígitos verificadores, precisam ser dígitos. No campo desta página, qualquer outro caractere (como
#ou_) é descartado enquanto você digita, então aqui o motivocaracteressó aparece quando há uma letra na posição dos dígitos verificadores, como em12.ABC.345/01DE-3X. Já a API e a função de código recusam caracteres estranhos com esse mesmo motivo. - Tamanho. Depois de limpo, o CNPJ precisa ter exatamente 14 caracteres.
- Sequência repetida. Se as doze primeiras posições forem o mesmo caractere, como em
00.000.000/0000-00, o número é rejeitado antes de qualquer conta. - Primeiro dígito verificador. Calculado a partir das doze primeiras posições com os pesos 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3 e 2.
- Segundo dígito verificador. Calculado a partir das treze primeiras posições com os pesos 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3 e 2.
Se tudo confere, o resultado é VÁLIDO. Se alguma etapa falha, o resultado é INVÁLIDO, com o motivo e, quando o problema está nos dígitos verificadores, os dígitos que eram esperados. Em qualquer caso, a ferramenta mostra a raiz (oito primeiras posições), a ordem (quatro seguintes) e se o número é de matriz (ordem 0001) ou de filial.
O campo aplica a máscara enquanto você digita e preserva a posição do cursor, então dá para colar um número inteiro ou corrigir um caractere no meio sem reescrever tudo.
Formato detectado: numérico ou alfanumérico
O validador não pede que você escolha o formato: ele o deduz. Se os 14 caracteres forem todos dígitos, o CNPJ é numérico; se houver ao menos uma letra, é alfanumérico. A regra de cálculo é a mesma nos dois casos, porque um dígito convertido por ASCII − 48 continua valendo ele mesmo.
Isso importa porque, desde julho de 2026, a Receita Federal emite CNPJs alfanuméricos para novas inscrições (IN RFB nº 2.229/2024), enquanto os numéricos existentes não mudam. Um mesmo cadastro de fornecedores pode ter 11.222.333/0001-81 e 12.ABC.345/01DE-35 lado a lado, e os dois são válidos. Saber o formato ajuda a investigar onde um sistema antigo falha: se só os alfanuméricos são recusados, o problema quase sempre é uma regex com \d, uma coluna numérica ou uma limpeza que descarta letras. O guia CNPJ alfanumérico: o que muda no seu sistema percorre esses pontos.
Motivos de invalidez
Cada falha tem uma causa diferente, e saber qual ocorreu ajuda a escolher a mensagem de erro do seu sistema. A API devolve o mesmo código que aparece na coluna da esquerda. Lembre que, no campo desta página, caracteres fora de [A-Za-z0-9] são descartados ao digitar; na API, eles produzem o motivo caracteres.
| Motivo | O que significa | Exemplo |
|---|---|---|
caracteres |
Há algo que não é dígito, letra ou separador, ou há letra na posição dos dígitos verificadores | 12.ABC.345/01DE-3X |
tamanho |
Depois de limpo, o número não tem 14 caracteres | 1.222.333/0001-81 |
repetido |
As doze primeiras posições são o mesmo caractere | 00.000.000/0000-00 |
dv1 |
O primeiro dígito verificador não confere | 11.222.333/0001-91 |
dv2 |
O primeiro confere, mas o segundo não | 11.222.333/0001-82 |
Nos dois últimos casos, a resposta também traz os dígitos esperados: para a raiz e a ordem de 11.222.333/0001, eles são 8 e 1. Isso permite mostrar ao usuário qual seria o final correto, o que ajuda a corrigir erros de digitação, mas não garante que o restante do número esteja certo. Mais casos prontos para teste estão em exemplos de CNPJ alfanumérico para teste.
Validar por código
A função abaixo, em JavaScript, faz as mesmas checagens da ferramenta e aceita os dois formatos:
function digito(chars, pesos) {
let soma = 0;
for (let i = 0; i < chars.length; i++) soma += (chars.charCodeAt(i) - 48) * pesos[i];
const resto = soma % 11;
return resto < 2 ? 0 : 11 - resto;
}
function validarCnpj(valor) {
const cnpj = String(valor).toUpperCase().replace(/[.\/\-\s]/g, '');
if (!/^[A-Z0-9]{12}\d{2}$/.test(cnpj)) return false;
if (/^(.)\1{11}/.test(cnpj)) return false;
const dv1 = digito(cnpj.slice(0, 12), [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]);
const dv2 = digito(cnpj.slice(0, 13), [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]);
return dv1 === Number(cnpj[12]) && dv2 === Number(cnpj[13]);
}
validarCnpj('11.222.333/0001-81'); // true
validarCnpj('12.ABC.345/01DE-35'); // true
validarCnpj('11.222.333/0001-82'); // false (2º dígito)
validarCnpj('00.000.000/0000-00'); // false (repetido)A regex ^[A-Z0-9]{12}\d{2}$ cobre as etapas de caracteres e tamanho de uma vez. O segundo dígito é calculado sobre as treze primeiras posições, ou seja, a base mais o primeiro dígito informado. Se esse primeiro dígito estiver errado, a comparação de dv1 já falha, então usar o valor informado não muda o resultado.
A validação no front-end melhora a experiência de quem preenche o formulário, mas não substitui a do servidor. Versões para outras linguagens estão em TypeScript, Python, PHP, C# e Delphi. Para a regex de formato isolada, veja o guia de regex para CNPJ.
Validar pela API
A API pública valida um CNPJ por requisição, sem chave. Envie o número sem máscara ou, se quiser manter a pontuação, codifique a barra como %2F, porque uma barra literal seria lida como separador de caminho:
GET https://www.cpf.dev.br/api/v1/cnpj/validar/12ABC34501DE35
Resposta para um CNPJ válido:
{
"valido": true,
"cnpj": "12ABC34501DE35",
"formatado": "12.ABC.345/01DE-35",
"formato": "alfanumerico",
"raiz": "12ABC345",
"ordem": "01DE",
"matriz": false
}
Para um CNPJ inválido, como 11222333000182, valido vem false, formatado vem null, motivo traz o código da tabela acima (dv2) e esperado informa os dígitos corretos, { "dv1": 8, "dv2": 1 }. O limite é de 60 requisições por minuto por IP; detalhes na documentação da API.
CNPJ válido não é CNPJ existente
Um resultado VÁLIDO significa apenas que os dígitos verificadores conferem com as doze primeiras posições. O validador não consulta a Receita Federal, então não diz:
- se o número foi de fato atribuído a alguma empresa;
- se a empresa está ativa, suspensa, inapta ou baixada;
- qual é a razão social, o endereço ou a atividade.
Qualquer pessoa pode produzir milhões de CNPJs válidos com a conta mostrada acima, e é exatamente o que o gerador de CNPJ faz para testes. Por isso a validação matemática serve para pegar erros de digitação cedo, não para confirmar que a empresa existe. Quando o processo exige isso, é preciso recorrer aos serviços oficiais de consulta. Para entender o que cada parte do número representa, leia o guia sobre a estrutura do CNPJ: raiz, ordem e dígitos.