A função
PHP
<?php
function generateCnpj(bool $alpha = false, bool $mask = false): string {
$set = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$base = '';
for ($i = 0; $i < 8; $i++) $base .= $alpha ? $set[random_int(0, 35)] : (string)random_int(0, 9);
$base .= '0001';
$w1 = [5,4,3,2,9,8,7,6,5,4,3,2];
$w2 = [6,5,4,3,2,9,8,7,6,5,4,3,2];
$dv = function (string $b, array $w): int {
$s = 0; foreach ($w as $i => $p) $s += (ord($b[$i]) - 48) * $p;
$r = $s % 11; return $r < 2 ? 0 : 11 - $r;
};
$d1 = $dv($base, $w1); $d2 = $dv($base . $d1, $w2);
$cnpj = $base . $d1 . $d2;
return $mask ? preg_replace('/^(..)(...)(...)(....)(..)$/', '$1.$2.$3/$4-$5', $cnpj) : $cnpj;
}
echo generateCnpj(); // '11222333000181' (numérico)
echo generateCnpj(false, true); // '11.222.333/0001-81'
echo generateCnpj(true); // '12ABC34501DE35' (alfanumérico)
echo generateCnpj(true, true); // '12.ABC.345/01DE-35'Monta 8 posições de base (dígitos, ou letras+dígitos quando $alpha é true), fixa a ordem da matriz em 0001 e calcula os dois verificadores. O $alpha só troca o alfabeto da base; o cálculo do DV é o mesmo, com a conversão ord($b[$i]) − 48 ('0'→0 … 'Z'→42). Os 2 verificadores são sempre numéricos.
Detalhe: com
$alpha = true a base é puramente aleatória sobre 36 símbolos, então existe uma chance mínima (~0,002%) de sair só com dígitos — ainda um CNPJ válido. Se quiser forçar ao menos uma letra na raiz, trate isso fora desta função.Validar o que você gerou
Gere, valide, garanta que fecha nos dois formatos. A página de validar CNPJ em PHP traz a função isValidCnpj que confere a saída.
PHP
var_dump(isValidCnpj(generateCnpj(true))); // truepublicidade
Cuidados
- Número fictício, não real. A função gera um CNPJ que passa no módulo 11, mas não corresponde a empresa nenhuma. É para teste de software e QA — ver se é legal gerar CPF/CNPJ e CNPJ válido vs. CNPJ real.
- Válido ≠ existe. Consistência matemática não é registro na Receita.
- Sequências repetidas passam no módulo 11 mas são reprovadas por bons validadores; o gerador quase nunca as produz (base aleatória).
- Matriz
0001. A base fixa0001nas quatro posições da ordem do estabelecimento — é o número da matriz. Filiais teriam0002em diante. - Alfanumérico entra em jul/2026 (IN RFB nº 2.229/2024), só para novos registros. O parâmetro
$alphajá antecipa o formato.
Continue
Perguntas frequentes
Como gerar um CNPJ válido em PHP?
Com uma função que monta 8 posições de base, fixa a ordem da matriz em
0001 e calcula os dois verificadores pelo módulo 11 com a conversão ord() − 48. Sem bibliotecas.Como gerar CNPJ alfanumérico em PHP?
Passe
$alpha = true: a base passa a sortear sobre 36 símbolos (A–Z e 0–9) em vez de só dígitos. O cálculo do DV é o mesmo e os dois verificadores continuam numéricos.O CNPJ gerado é de uma empresa real?
Não. A função produz um número que passa no módulo 11, mas não corresponde a empresa nenhuma — veja CNPJ válido vs. CNPJ real.
Código verificado por execução: a saída passa no validador (módulo 11 com ASCII−48; exemplo SERPRO 12ABC34501DE→35). Números fictícios para teste. Revisado em 06/2026.