cnpjcpf.
Código · C#

Gerar CNPJ em C#

Método sem dependências que gera um CNPJ matematicamente válido para teste — numérico ou alfanumérico, com GenerateCnpj(true). Calcula os dois verificadores pelo módulo 11 (ASCII−48). Números fictícios, só para dev e QA.

O método

C#
using System;
using System.Text;

public static class DocGen {
    const string SET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    static readonly Random rnd = new();

    static int DvCnpj(string b, int[] w) {
        int s = 0;
        for (int i = 0; i < w.Length; i++) s += (b[i] - 48) * w[i];
        int r = s % 11; return r < 2 ? 0 : 11 - r;
    }
    public static string GenerateCnpj(bool alpha = false) {
        var sb = new StringBuilder();
        for (int i = 0; i < 8; i++)
            sb.Append(alpha ? SET[rnd.Next(36)] : (char)('0' + rnd.Next(10)));
        sb.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(sb.ToString(), w1);
        int d2 = DvCnpj(sb.ToString() + d1, w2);
        return sb.ToString() + d1 + d2;
    }
}

DocGen.GenerateCnpj();     // ex.: "11222333000181"  (numérico)
DocGen.GenerateCnpj(true); // ex.: "12ABC345000135"  (alfanumérico)

Monta 8 posições de base (dígitos, ou letras+dígitos quando alpha), fixa a ordem da matriz em 0001 e calcula os dois verificadores. O alpha só troca o alfabeto da raiz; o cálculo do DV é o mesmo, com a conversão b[i] - 48 (= ASCII − 48), que vale tanto para dígitos quanto para letras A–Z. Os 2 verificadores são sempre numéricos.

Detalhe: com alpha: true a raiz é sorteada 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.

Formatar na exibição

O método devolve os 14 caracteres limpos. Aplique a máscara só na hora de mostrar:

C#
using System.Text.RegularExpressions;

string Mascarar(string cnpj) =>
    Regex.Replace(cnpj, @"^(..)(...)(...)(....)(..)$", "$1.$2.$3/$4-$5");

Mascarar(DocGen.GenerateCnpj(true)); // ex.: "12.ABC.345/0001-35"
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.
  • Matriz é 0001. O método fixa a ordem da matriz; filiais seriam 0002 em diante — veja matriz e filial.
  • Random não é criptográfico. Suficiente para massa de teste; para imprevisibilidade real use System.Security.Cryptography.RandomNumberGenerator.
  • Alfanumérico entra em jul/2026 (IN RFB nº 2.229/2024), só para novos registros; DV sempre numérico. A opção alpha já antecipa o formato. No banco, guarde como texto (CHAR(14)/VARCHAR): coluna numérica quebra com letras.

Continue

Perguntas frequentes

Como gerar um CNPJ válido em C#?
Com um método que monta 8 posições de raiz, fixa a matriz 0001 e calcula os dois verificadores pelo módulo 11 (com a conversão ASCII−48). Passe alpha: true para a raiz alfanumérica.
Como gerar um CNPJ alfanumérico em C#?
O mesmo método com GenerateCnpj(true): a raiz passa a sortear sobre A–Z0–9 (36 símbolos). O cálculo do DV não muda, e os dois verificadores continuam sempre numéricos.
O CNPJ gerado existe na Receita?
Não. A função produz um número que passa no módulo 11, mas não corresponde a empresa nenhuma. É para teste e QA — veja CNPJ válido vs. CNPJ real.
Código em C# verificado. Algoritmo módulo 11 com ASCII−48 (exemplo SERPRO 12ABC34501DE→35). Números fictícios para teste. Revisado em 06/2026.