cnpjcpf.
Código · Java

Gerar CPF em Java

Método sem dependências que gera um CPF matematicamente válido para teste: sorteia 9 dígitos de base e calcula os dois verificadores pelo módulo 11. Números fictícios, só para dev e QA.

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-00 apenas 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.