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.

javascript
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}`;
}
python
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}"