cnpjcpf.
Código · Java

Gerar CNPJ em Java

Método sem dependências que gera um CNPJ matematicamente válido para teste — numérico ou alfanumérico, conforme o boolean alpha. Calcula os dois verificadores pelo módulo 11 (ASCII−48).

O método

Java
import java.util.concurrent.ThreadLocalRandom;

public final class DocGen {
    private static final String SET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

    private static int dvCnpj(String b, int[] w) {
        int s = 0;
        for (int i = 0; i < w.length; i++) s += (b.charAt(i) - 48) * w[i];
        int r = s % 11; return r < 2 ? 0 : 11 - r;
    }

    public static String generateCnpj(boolean alpha) {
        var rnd = ThreadLocalRandom.current();
        StringBuilder base = new StringBuilder();
        for (int i = 0; i < 8; i++)
            base.append(alpha ? String.valueOf(SET.charAt(rnd.nextInt(36))) : String.valueOf(rnd.nextInt(10)));
        base.append("0001");
        int[] w1 = {5,4,3,2,9,8,7,6,5,4,3,2};
        int[] w2 = {6,5,4,3,2,9,8,7,6,5,4,3,2};
        int d1 = dvCnpj(base.toString(), w1);
        int d2 = dvCnpj(base.toString() + d1, w2);
        return base.toString() + d1 + d2;
    }
}

DocGen.generateCnpj(false); // "11222333000181"  (numérico)
DocGen.generateCnpj(true);  // "12ABC34501DE35"  (alfanumérico)

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 (charAt(i) - 48) = ASCII − 48. 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 do núcleo.
publicidade

Cuidados

  • Número fictício, não real. O método 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.
  • ThreadLocalRandom não é criptográfico. Suficiente para massa de teste; para imprevisibilidade real use java.security.SecureRandom.
  • Alfanumérico entra em jul/2026 (IN RFB nº 2.229/2024), só para novos registros. O boolean alpha já antecipa o formato.

Continue

Perguntas frequentes

Como gerar um CNPJ alfanumérico em Java?
Passe true para o parâmetro alpha: a base de 8 posições passa a sortear sobre A–Z0–9 (36 símbolos). O cálculo dos dois verificadores é o mesmo, com a conversão ASCII − 48.
Os dígitos verificadores podem ser letras?
Não. A base pode ser alfanumérica, mas os 2 verificadores são sempre numéricos — saem do resto da divisão por 11.
O CNPJ gerado existe de fato?
Não. A função produz um número que passa no módulo 11, mas não corresponde a empresa nenhuma nem é registro na Receita. É para teste e QA.
Código em Java verificado. Algoritmo módulo 11 com ASCII−48 (exemplo SERPRO 12ABC34501DE→35). Números fictícios para teste. Revisado em 06/2026.