CNPJ é a sigla para Cadastro Nacional de Pessoas Jurídicas e trata-se de um número registrado pela Receita Federal durante a abertura de uma empresa.
Em poucas palavras, o CNPJ trata-se de um documento básico de identificação que todo negócio precisa ter antes mesmo de iniciar as suas atividades no mercado.
O documento funciona basicamente como um CPF para empresas, que permite que o governo, outras empresas ou até mesmo pessoas físicas, possam identificar a empresa durante as suas atividades e acessar informações,
Dica de Leitura: Se você está se preparando para as mudanças no CNPJ e precisa de ajuda para implementar validações de forma eficiente, talvez seja útil explorar como utilizar tecnologias de código aberto e inteligência artificial para automatizar processos. Leia nosso guia sobre como usar o OpenAI Codex com mais eficiência para descobrir como essas ferramentas podem ajudar na validação e processamento de dados.
Mudanças no CNPJ
Acontece que o CNPJ vai mudar a partir de julho de 2026 e passará a ser alfanumérico, contendo letras e números Até então com formato apenas numérico, esse código passará a ser composto por uma combinação de letras e números a partir de julho de 2026.
O Serpro, em parceria com a RFB, disponibiliza, na pasta cnpj-alfanumerico.zip, códigos de validação do dígito verificador do CNPJ desenvolvidos nas linguagens Java, Python e TypeScript.
Além disso, o documento CalculoDVCNPJAlfanumerico.pdf oferece uma explicação detalhada sobre o cálculo do dígito verificador, permitindo sua implementação em outras linguagens de programação. Basta acessar os links.
Onde localizar os códigos de validação no ZIP
Você deve acessar o repositório (provavelmente hospedado pelo Serpro ou GitHub próprio), dentro dele encontrará:
validate_cnpj.javaou similar (Java)validate_cnpj.py(Python)validateCnpj.ts(TypeScript)- PDF explicando o cálculo do dígito verificador
A mudança no CNPJ foi anunciada oficialmente pela Receita Federal. O objetivo do CNPJ alfanumérico, como o novo formato vem sendo chamado, é aumentar a capacidade de geração de novas inscrições deste documento.
O formato atual, que continuará válido para cadastros já existentes, o CNPJ é formado por 14 dígitos. Como explica o Serpro (Serviço Federal de Processamento de Dados), os oito primeiros dígitos servem para identificar a pessoa jurídica (como uma empresa).
Os quatro dígitos seguintes correspondem ao número de ordem e servem para identificar os estabelecimentos da organização, como matriz ou filiais. Os últimos dois dígitos servem para validar toda a sequência por meio de um cálculo específico chamado de “módulo 11”.
Como será o CNPJ alfanumérico?
O CNPJ alfanumérico continuará sendo composto por 14 caracteres, mas qualquer um dos 12 primeiros dígitos poderá ser um número ou uma letra maiúscula. Apenas os dois últimos dígitos permanecerão sendo somente numéricos para cumprir a função de verificação de toda a sequência.
Segundo o Serpro, o novo formato permitirá o registro de mais de 1 quadrilhão de organizações, com cada uma delas podendo registrar mais de 1 milhão de filiais.
Por outro lado, sistemas de gestão empresarial e tantos outros terão que ser adaptados para o novo formato do CNPJ. O Serpro explica que esse trabalho envolverá três processos principais:
- adaptação para “receber” e “ler” o CNPJ alfanumérico;
- adaptação nos bancos de dados para armazenar o novo formato;
- incorporação da nova rotina para o cálculo dos dígitos verificadores.
Dessa forma, a implementação do CNPJ alfanumérico visa garantir a continuidade das políticas públicas e assegurar a disponibilidade de números de identificação, sem causar impactos técnicos significativos para a sociedade brasileira.
Tech Lead Setup
Arquitetura & Refatoração Segura
🖥️ LG UltraWide 34″ (Side-by-side: Código Antigo vs Novo)
📝 Lousa de Vidro Magnética (Mapeamento de Banco de Dados)
⌨️ Logitech ERGO K860 (Prevenção de LER em Longas Sprints)
⚡ 3 Hacks de Migração (Sênior/DBA)
1. Indexação Otimizada (DBA Hack):
Mudar colunas indexadas para VARCHAR(14) UTF-8 destrói o cache. Use CHAR(14) ASCII. O novo CNPJ só usa A-Z/0-9, isso corta o peso do índice pela metade e salva seus JOINs.
2. Validação O(1) na Memória:
O novo cálculo do dígito verificador exige converter letras (A=10, B=11). Evite Switches/IFs pesados. Carregue um mapa Hash na inicialização do microsserviço para fazer a busca em tempo constante.
3. Zero Downtime (Strangler Pattern):
Não faça ALTER TABLE na coluna de produção. Crie documento_novo, use Dual-Write na API e rode um worker em background para sincronizar o passado. Quando estabilizar, assuma a coluna nova.
Mais para desenvolvedores
Exemplos simplificados (adaptados a partir dos códigos oficiais)
Java
javaCopiarEditarprivate static final Pattern PATTERN = Pattern.compile("[0-9A-Z]{2}\\.[0-9A-Z]{3}\\.[0-9A-Z]{3}/[0-9A-Z]{4}-[0-9]{2}");
int[] weights = {6,5,4,3,2,9,8,7,6,5,4,3,2};
boolean isValid(String cnpj) {
if (!PATTERN.matcher(cnpj).matches()) return false;
String s = cnpj.replaceAll("[\\./-]", "");
String core = s.substring(0, 12);
int dv1 = calcDv(core, 1);
int dv2 = calcDv(core + dv1, 0);
return s.charAt(12)-'0' == dv1 && s.charAt(13)-'0' == dv2;
}
int calcDv(String s, int shift) { ... } // módulo 11 adaptado via ASCII-48
O cálculo do dígito usa multiplicadores fixos e a regra resultado = (11 – (soma % 11)), se ≥2; senão zero, aplicando a tabela ASCII-48 para letras serpro.gov.brdomvsit.com.br+11welyab.dev+11serpro.gov.br+11techshake.com+7tecnoblog.net+7serpro.gov.br+7.
Python
Baseado em repositórios no GitHub (ex.: TigoP e JCLucieto):
pythonCopiarEditarimport re
class NovoCNPJ:
PATTERN = re.compile(r"[0-9A-Z]{2}\.[0-9A-Z]{3}\.[0-9A-Z]{3}/[0-9A-Z]{4}-[0-9]{2}")
def __init__(self, cnpj): ...
def normalize(self):
self.raw = re.sub(r"[^\dA-Z]", "", self.cnpj)
def to_values(self):
return [(ord(ch)-48) for ch in self.raw[:12]]
def calc_dv(self, values, shift):
...
def validate(self):
...
Esses projetos também fazem normalização, cálculo e validação completa github.com.
TypeScript
Provavelmente semelhante ao GitHub “CNpjAlfaNumerico” ou gist:
tsCopiarEditarconst regex = /^[0-9A-Z]{14}$/;
function validCnpj(cnpj: string): boolean {
if (!regex.test(cnpj)) return false;
const nums = cnpj.split("").map(ch => {
const code = ch.charCodeAt(0) - 48;
return code;
});
// mesmo cálculo com weights e módulo 11...
}
Alguns gists usam a função validCalc com loop e fator que reinicia em 9 techshake.com+13gist.github.com+13github.com+13.
🧪 Exemplos de regex para validação de formato
Aqui estão expressões regulares para validar o formato do CNPJ alfanumérico (14 caracteres, letras maiúsculas nos 12 primeiros e números nos 2 finais), suportando com e sem formatação:
| Regex | Permite | Comentário |
|---|---|---|
^[0-9A-Z]{12}[0-9]{2}$ |
Sem pontos, barras ou hífen | Apenas caracteres diretos |
^[0-9A-Z]{2}\.[0-9A-Z]{3}\.[0-9A-Z]{3}/[0-9A-Z]{4}-[0-9]{2}$ |
Com máscara clássica | Requer pontuação correta |
^[0-9A-Z]{2}\.?[0-9A-Z]{3}\.?[0-9A-Z]{3}/?[0-9A-Z]{4}-?[0-9]{2}$ |
Com máscara opcional | Flexível com ou sem formatação |
Combine esses regexes com o algoritmo módulo 11 adaptado para uma validação completa: formato + dígito verificador.
Continue aprendendo:
Agora que você já sabe tudo sobre CNPJ, que tal aprender como aplicar suas habilidades em Python em uma entrevista técnica?
FAQ: Migração CNPJ Alfanumérico
O que muda na estrutura do novo CNPJ?
+
Qual é o prazo oficial para a mudança?
+
Como adaptar o Banco de Dados (SQL/NoSQL)?
+
BIGINT ou numéricas quebram com o novo formato. A recomendação técnica é migrar o schema para VARCHAR(14) ou CHAR(14). Para manter a performance de indexação B-Tree, configure a Collation da coluna para ASCII.