A função
PHP
<?php
function generateCpf(bool $mask = false): string {
$base = '';
for ($i = 0; $i < 9; $i++) $base .= random_int(0, 9);
$dv = function (string $b): int {
$n = strlen($b); $s = 0;
for ($i = 0; $i < $n; $i++) $s += (int)$b[$i] * (($n + 1) - $i);
$r = $s % 11; return $r < 2 ? 0 : 11 - $r;
};
$d1 = $dv($base); $d2 = $dv($base . $d1);
$cpf = $base . $d1 . $d2;
return $mask ? preg_replace('/(\d{3})(\d{3})(\d{3})(\d{2})/', '$1.$2.$3-$4', $cpf) : $cpf;
}
echo generateCpf(); // '11144477735'
echo generateCpf(true); // '111.444.777-35'Sorteia 9 dígitos de base com random_int, calcula o 1º verificador sobre esses 9 dígitos e o 2º sobre os 10 (já incluindo o 1º DV). O resto da divisão por 11 vira o dígito: $r < 2 ? 0 : 11 - $r. É o módulo 11 aplicado para frente.
Validar o que você gerou
Útil em teste: gere, valide, garanta que o algoritmo fecha. A página de validar CPF em PHP traz a função isValidCpf que confere a saída.
PHP
var_dump(isValidCpf(generateCpf())); // truepublicidade
Cuidados
- Número fictício, não real. A função gera um CPF que passa no módulo 11, mas não corresponde a nenhuma pessoa. É para teste de software e QA — ver se é legal gerar CPF/CNPJ.
- Válido ≠ existe. Consistência matemática não é emissão pela Receita. Não use saída de gerador como dado de pessoa real.
- Sequências repetidas (
11111111111) são tecnicamente consistentes no módulo 11; bons validadores as reprovam de propósito, mas o gerador quase nunca as produz (base aleatória). - A matriz é sempre
0001? Isso é do CNPJ. No CPF os 9 dígitos de base são todos aleatórios; só os 2 verificadores são calculados. - Guarde sem máscara (só os 11 dígitos) e formate só na exibição.
Continue
Perguntas frequentes
Como gerar um CPF válido em PHP?
Com uma função que sorteia 9 dígitos de base com
random_int(0, 9) e calcula os dois dígitos verificadores pelo módulo 11. Sem bibliotecas, só a PHP padrão.O CPF gerado é de uma pessoa real?
Não. A função produz um número que passa no módulo 11, mas não corresponde a ninguém. É para teste de software e QA — veja se é legal gerar CPF/CNPJ.
Por que usar random_int e não rand?
O
random_int é criptograficamente seguro e não tem viés. Para massa de teste o rand serve, mas o random_int é a escolha padrão correta no PHP moderno.Código verificado por execução: a saída passa no validador (módulo 11 oficial). Números fictícios para teste de software. Revisado em 06/2026.