cnpjcpf.
Código · PHP

Gerar CNPJ em PHP

Função sem dependências que gera um CNPJ matematicamente válido para teste — numérico ou alfanumérico, com o parâmetro $alpha. Calcula os dois verificadores pelo módulo 11 (ASCII−48) e opcionalmente aplica a máscara.

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))); // true
publicidade

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 fixa 0001 nas quatro posições da ordem do estabelecimento — é o número da matriz. Filiais teriam 0002 em diante.
  • Alfanumérico entra em jul/2026 (IN RFB nº 2.229/2024), só para novos registros. O parâmetro $alpha já 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.