Gerador de CNPJ: matriz, filial e a matemática do dígito verificador
O CNPJ (Cadastro Nacional da Pessoa Jurídica) identifica uma empresa em
14 dígitos, estruturados em três blocos: os 8 primeiros dígitos formam a
raiz (identificam a empresa em si, independente de suas filiais), os 4
dígitos seguintes são o número de ordem (0001 para a matriz,
valores subsequentes para cada filial registrada sob a mesma raiz), e os
2 últimos são os dígitos verificadores. Diferente do CPF, cujo cálculo
usa uma sequência simples de pesos decrescentes, o CNPJ usa dois vetores
de peso fixos e não sequenciais — o que faz sentido do ponto de vista de
engenharia do algoritmo original: os pesos são desenhados para que a
posição do número de ordem (que muda entre matriz e filiais de uma mesma
raiz) tenha peso baixo o suficiente para não dominar o cálculo.
Casos de uso em testes de integração B2B
Sistemas que emitem nota fiscal eletrônica, geram boletos, integram com
ERPs ou validam cadastro de fornecedor quase sempre exigem CNPJ com
dígito verificador correto antes mesmo de considerar a existência real
da empresa — a validação de formato acontece no front-end ou na camada
de API, antes de qualquer consulta a um serviço externo (como a própria
Receita Federal ou um provedor de dados cadastrais). Isso torna o CNPJ
sintético adequado para testar exatamente essa camada: formulários de
cadastro de fornecedor em Cypress/Playwright, testes de contrato de API
que validam o payload de um endpoint de emissão de NF-e, ou seed de
banco de homologação para um módulo de contas a pagar que relaciona
fornecedores por CNPJ. Como o gerador
permite escolher entre matriz (0001) e filial (ordem
aleatória), também é possível testar especificamente a lógica de
agrupamento de filiais sob a mesma raiz — um caso que costuma escapar de
testes escritos apressadamente com um único CNPJ fixo.
A matemática dos dois dígitos verificadores
O cálculo do CNPJ usa dois vetores de peso fixos, aplicados posicionalmente aos dígitos já existentes — sem a lógica de "peso decrescente contínuo" usada no CPF:
Primeiro dígito (posição 13) — os 12 primeiros dígitos
(raiz + ordem) são multiplicados, posição a posição, pelo vetor de pesos
[5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]. Os 12 produtos são
somados e o resultado é dividido por 11; se o resto for 0 ou 1 o dígito
é 0, caso contrário o dígito é 11 - resto — a mesma regra
de conversão de resto usada no CPF, mas aplicada sobre uma soma ponderada
diferente.
Segundo dígito (posição 14) — repete-se o processo
sobre os 13 dígitos agora disponíveis (12 originais + o primeiro dígito
verificador), com o vetor de pesos
[6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2], que é o primeiro
vetor deslocado em uma posição com um 6 adicionado à
frente. Essa relação entre os dois vetores não é coincidência: garante
que o segundo dígito dependa do primeiro sem exigir uma tabela de pesos
totalmente independente.
Note a diferença estrutural em relação ao CPF: lá, o peso de cada
posição é simplesmente (quantidade de dígitos restantes + 1),
uma progressão aritmética simples. No CNPJ, os pesos são uma tabela fixa
que não segue uma progressão linear — motivo pelo qual a implementação
deste gerador guarda os dois vetores como constantes
(PESOS_DV1 e PESOS_DV2) em vez de calculá-los
dinamicamente.
Assim como no CPF, sequências com os 14 dígitos idênticos são descartadas explicitamente antes da validação — elas produziriam um dígito verificador "válido" pela fórmula, mas nunca correspondem a um CNPJ real emitido pela Receita Federal, e a ferramenta de validação deste site rejeita esse padrão antes de aplicar o cálculo do Módulo 11.
Dados fictícios em ambientes de homologação
Usar CNPJs de empresas reais para popular um ambiente de testes carrega o mesmo risco de qualquer outro dado cadastral real fora de contexto: associação indevida de uma empresa real a um cenário de teste (incluindo cenários de erro, fraude simulada ou inadimplência fictícia), o que pode gerar exposição reputacional mesmo sem caracterizar um incidente de dado pessoal em sentido estrito, já que CNPJ identifica pessoa jurídica. Gerar a base sinteticamente evita esse problema na raiz.