Regex de CNPJ (numérico e alfanumérico)
Regex de CNPJ que aceita o formato numérico atual e o alfanumérico, com ou sem pontuação. Só o formato: os dígitos verificadores precisam de cálculo à parte.
O padrão
[0-9A-Z]{2}\.[0-9A-Z]{3}\.[0-9A-Z]{3}/[0-9A-Z]{4}-\d{2}|[0-9A-Z]{12}\d{2}
Flags: nenhuma. Sem âncoras: para validar um campo inteiro use ^(?:padrão)$.
Teste na hora
| Linha | Resultado |
|---|
Tudo roda no seu navegador; nada do que você digita é enviado.
Exemplos
Casam
11.222.333/0001-811122233300018112.ABC.345/01DE-351234567800NA84
Não casam
11.222.333/0001-812.abc.345/01de-3511222333000181X11.222.333-0001/8112.ABC.345/01DE-AB
Como funciona, por partes
[0-9A-Z]{2}\.[0-9A-Z]{3}\.[0-9A-Z]{3}/[0-9A-Z]{4}: Parte formatada: 2, 3, 3 e 4 posições separadas por ponto, ponto e barra. Cada posição aceita dígito ou letra maiúscula, porque o CNPJ alfanumérico usa letras nas doze primeiras posições.-\d{2}: Os dois últimos caracteres, depois do hífen, continuam sendo apenas números: são os dígitos verificadores.[0-9A-Z]{12}\d{2}: Alternativa sem pontuação: doze caracteres entre dígitos e letras maiúsculas, seguidos de dois dígitos. Totaliza quatorze caracteres, como no CNPJ numérico tradicional.Compatibilidade: Todo CNPJ numérico já existente casa com o padrão, pois dígito está dentro do conjunto [0-9A-Z]. Por isso um único regex serve para os dois formatos, sem precisar de uma versão por época.Letras minúsculas: O padrão não usa a flag i de propósito: o formato oficial é em maiúsculas. Se o seu formulário aceita minúsculas, converta com toUpperCase antes de testar e guarde em maiúsculas.
Armadilhas
- Formato correto não é CNPJ válido. Os dois dígitos finais saem de um cálculo sobre os doze primeiros caracteres; no formato alfanumérico, cada letra entra no cálculo pelo seu código ASCII menos 48. Valide pelo cálculo, não pelo regex.
- Sistemas antigos que guardam o CNPJ como número inteiro perdem os zeros à esquerda e quebram quando surgem letras. Guarde sempre como texto de 14 caracteres.
- Colunas, campos e APIs limitados a dígitos recusarão o CNPJ alfanumérico. Confira também máscaras de entrada e validações de banco, não só o regex da aplicação.
- Um CNPJ bem formado pode estar baixado, inapto ou nem existir. A situação cadastral só se consulta na Receita Federal.
Código pronto
JavaScript
const re = new RegExp("^(?:[0-9A-Z]{2}\\.[0-9A-Z]{3}\\.[0-9A-Z]{3}/[0-9A-Z]{4}-\\d{2}|[0-9A-Z]{12}\\d{2})$");
console.log(re.test(texto.trim()));
Python
import re
re_cnpj = re.compile(r"[0-9A-Z]{2}\.[0-9A-Z]{3}\.[0-9A-Z]{3}/[0-9A-Z]{4}-[0-9]{2}|[0-9A-Z]{12}[0-9]{2}")
print(bool(re_cnpj.fullmatch(texto.strip())))
C#
using System.Text.RegularExpressions;
var re = new Regex(@"^(?:[0-9A-Z]{2}\.[0-9A-Z]{3}\.[0-9A-Z]{3}/[0-9A-Z]{4}-[0-9]{2}|[0-9A-Z]{12}[0-9]{2})\z");
bool ok = re.IsMatch(texto.Trim());
Perguntas frequentes
O que muda no CNPJ alfanumérico?
O número continua com 14 caracteres, mas as doze primeiras posições podem ter letras maiúsculas além de dígitos. Os dois últimos continuam sendo dígitos verificadores. Os CNPJs já existentes não mudam.
Posso usar só \d{14} em sistemas novos?
Não, se quiser aceitar empresas com o novo formato. O \d{14} recusaria qualquer CNPJ com letra. Use um conjunto que inclua A a Z nas doze primeiras posições, como neste padrão.
Os CNPJs dos exemplos existem?
Foram gerados por cálculo dos dígitos verificadores a partir de sequências arbitrárias, sem consulta ao cadastro. Servem apenas como teste de formato e podem, por coincidência, pertencer a alguém. Não os use em cadastros.