O método
Java
import java.util.concurrent.ThreadLocalRandom;
public final class DocGen {
private static int dvCpf(String b) {
int n = b.length(), s = 0;
for (int i = 0; i < n; i++) s += (b.charAt(i) - '0') * ((n + 1) - i);
int r = s % 11; return r < 2 ? 0 : 11 - r;
}
public static String generateCpf() {
var rnd = ThreadLocalRandom.current();
StringBuilder base = new StringBuilder();
for (int i = 0; i < 9; i++) base.append(rnd.nextInt(10));
int d1 = dvCpf(base.toString());
int d2 = dvCpf(base.toString() + d1);
return base.toString() + d1 + d2;
}
}
DocGen.generateCpf(); // "11144477735"Sorteia 9 dígitos de base, calcula o 1º verificador com pesos 10..2 e o 2º com pesos 11..2 (incluindo o 1º DV no cálculo). O resto da divisão por 11 vira o dígito: r < 2 ? 0 : 11 - r. É o módulo 11 aplicado para frente. A saída é a string crua de 11 dígitos — formate só na exibição.
publicidade
Cuidados
- Número fictício, não real. O método 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.
- ThreadLocalRandom não é criptográfico. Para massa de teste tudo bem; se precisar de imprevisibilidade real, troque por
java.security.SecureRandom. - Guarde sem máscara (só os 11 dígitos) e aplique o formato
000.000.000-00apenas na apresentação.
Continue
Perguntas frequentes
Como gerar um CPF válido em Java sem biblioteca?
Com um método estático que sorteia 9 dígitos de base e calcula os dois verificadores pelo módulo 11. Usa só
java.util.concurrent.ThreadLocalRandom.O CPF gerado existe de fato?
Não. A função produz um número que passa no módulo 11 (consistência matemática), mas não corresponde a nenhuma pessoa nem foi emitido pela Receita Federal. É para teste e QA.
ThreadLocalRandom é seguro?
Para massa de teste, sim. Não é criptográfico: se precisar de imprevisibilidade real, troque por
java.security.SecureRandom.Código em Java verificado. Algoritmo módulo 11 oficial. Números fictícios para teste de software. Revisado em 06/2026.