Ferramenta
Validador de CNPJ
Confere o dígito verificador e mostra a conta. Nada é enviado para o servidor.
Com ou sem máscara. Aceita o formato alfanumérico, válido para inscrições a partir de 31/07/2026.
Precisa dos dados cadastrais e não só da validade? Consulte o CNPJ ou use a API pública.
O que mudou em 2026
Desde 31/07/2026, as novas inscrições saem no formato alfanumérico: as 12 primeiras posições aceitam letras maiúsculas, e só os dois dígitos verificadores continuam numéricos. Os CNPJs já existentes seguem válidos e sem alteração. O cálculo do dígito não mudou. O que mudou é que agora ele opera sobre o código ASCII de cada caractere menos 48, o que mantém o resultado idêntico para os que só têm números.
Use no seu código
Implementação completa, já com o formato alfanumérico. Sem dependência.
function cnpjValido(valor) {
const cnpj = valor.replace(/[.\-/\s]/g, "").toUpperCase();
if (!/^[A-Z0-9]{12}\d{2}$/.test(cnpj)) return false;
if (new Set(cnpj).size === 1) return false;
// Valor do caractere: código ASCII menos 48 ('0' = 0, 'A' = 17).
const valorDe = (c) => c.charCodeAt(0) - 48;
const digito = (base, pesos) => {
const soma = base
.split("")
.reduce((total, c, i) => total + valorDe(c) * pesos[i], 0);
const resto = soma % 11;
return resto < 2 ? 0 : 11 - resto;
};
const base = cnpj.slice(0, 12);
const dv1 = digito(base, [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]);
const dv2 = digito(base + dv1, [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]);
return cnpj.slice(12) === `${dv1}${dv2}`;
}import re
def cnpj_valido(valor: str) -> bool:
cnpj = re.sub(r"[.\-/\s]", "", valor).upper()
if not re.fullmatch(r"[A-Z0-9]{12}\d{2}", cnpj):
return False
if len(set(cnpj)) == 1:
return False
# Valor do caractere: código ASCII menos 48 ('0' = 0, 'A' = 17).
def digito(base: str, pesos: list[int]) -> int:
soma = sum((ord(c) - 48) * p for c, p in zip(base, pesos))
resto = soma % 11
return 0 if resto < 2 else 11 - resto
base = cnpj[:12]
dv1 = digito(base, [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2])
dv2 = digito(f"{base}{dv1}", [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2])
return cnpj[12:] == f"{dv1}{dv2}"