Gerador de CNPJ válido para testes
O CNPJ Gerador cria CNPJs válidos, numéricos ou alfanuméricos, para testes de software, com ou sem máscara e em lote.
Grátis, sem cadastro, 100% no navegador
CNPJ numérico vs alfanumérico: o que mudou em julho de 2026
Desde julho de 2026, a Receita Federal emite CNPJs com letras para novas inscrições. Quem já tem CNPJ não muda nada: o número continua o mesmo e segue válido. O formato do CNPJ mantém 14 caracteres e o DV continua numérico.
| Aspecto | Numérico | Alfanumérico |
|---|---|---|
| Quem recebe | Todos os CNPJs emitidos até junho de 2026 | Novas inscrições, de empresas e filiais, desde julho de 2026 |
| Posições 1 a 12 | Só dígitos de 0 a 9 | Letras de A a Z (maiúsculas) e dígitos |
| Posições 13 e 14 | 2 dígitos verificadores | 2 dígitos verificadores, sempre numéricos |
| Tamanho | 14 caracteres | 14 caracteres |
| Máscara | 11.222.333/0001-81 | 12.ABC.345/01DE-35 |
| Cálculo do DV | Módulo 11 | Mesmo módulo 11, com valor = ASCII - 48 |
| Coluna no banco | Muitas vezes BIGINT ou NUMERIC(14) | Precisa ser texto: CHAR(14) ou VARCHAR(14) |
A máscara do CNPJ alfanumérico é a mesma, XX.XXX.XXX/XXXX-XX. Por isso o seu sistema precisa aceitar os dois formatos ao mesmo tempo. Para testar só o formato novo, use o gerador de CNPJ alfanumérico.
Quantos dígitos tem o CNPJ: anatomia de um exemplo alfanumérico
O CNPJ tem 14 caracteres, com ou sem letras. Exemplo de CNPJ alfanumérico publicado pela Receita: 12.ABC.345/01DE-35.
- Raiz posições 1 a 8
- Identifica a empresa. É igual na matriz e em todas as filiais. No formato novo aceita letras.
- Ordem posições 9 a 12
0001é a matriz;0002,0003e assim por diante são filiais. Também aceita letras, como01DE.- Dígitos verificadores posições 13 e 14
- Calculados a partir dos 12 primeiros por módulo 11. São sempre números, mesmo no CNPJ alfanumérico.
Como calcular o dígito verificador do CNPJ
A regra é a mesma para os dois formatos. Cada caractere vale o seu código ASCII menos 48, então os dígitos valem eles mesmos e as letras vão de A = 17 a Z = 42. Veja a conta completa para 12.ABC.345/01DE-35.
DV1: 12 primeiros caracteres, pesos 5 a 2 e 9 a 2
| Caractere | 1 | 2 | A | B | C | 3 | 4 | 5 | 0 | 1 | D | E |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Valor | 1 | 2 | 17 | 18 | 19 | 3 | 4 | 5 | 0 | 1 | 20 | 21 |
| Peso | 5 | 4 | 3 | 2 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
| Produto | 5 | 8 | 51 | 36 | 171 | 24 | 28 | 30 | 0 | 4 | 60 | 42 |
DV2: 12 caracteres + DV1, pesos 6 a 2 e 9 a 2
| Caractere | 1 | 2 | A | B | C | 3 | 4 | 5 | 0 | 1 | D | E | 3 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Valor | 1 | 2 | 17 | 18 | 19 | 3 | 4 | 5 | 0 | 1 | 20 | 21 | 3 |
| Peso | 6 | 5 | 4 | 3 | 2 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
| Produto | 6 | 10 | 68 | 54 | 38 | 27 | 32 | 35 | 0 | 5 | 80 | 63 | 6 |
12.ABC.345/01DE-35.Tabela ASCII - 48 para as letras
Dígitos de 0 a 9 valem o próprio número.
- A17
- B18
- C19
- D20
- E21
- F22
- G23
- H24
- I25
- J26
- K27
- L28
- M29
- N30
- O31
- P32
- Q33
- R34
- S35
- T36
- U37
- V38
- W39
- X40
- Y41
- Z42
Código pronto para gerar e validar CNPJ
Funções que aceitam os dois formatos, testadas contra 11.222.333/0001-81 e 12.ABC.345/01DE-35. Todas usam gerador aleatório criptográfico.
const PESOS = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
const CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
// Valor do caractere = código ASCII - 48 (0-9 = 0-9, A = 17 ... Z = 42)
function dv(base: string): number {
const pesos = PESOS.slice(13 - base.length);
const soma = [...base].reduce((s, c, i) => s + (c.charCodeAt(0) - 48) * pesos[i], 0);
const r = soma % 11;
return r < 2 ? 0 : 11 - r;
}
export function validarCnpj(valor: string): boolean {
const c = valor.replace(/[.\/-]/g, '').toUpperCase();
if (!/^[A-Z0-9]{12}\d{2}$/.test(c) || /^(.)\1+$/.test(c)) return false;
const d1 = dv(c.slice(0, 12));
return c.slice(12) === `${d1}${dv(c.slice(0, 12) + d1)}`;
}
export function gerarCnpj(alfanumerico = false): string {
const pool = alfanumerico ? CHARS : CHARS.slice(0, 10);
const limite = 256 - (256 % pool.length); // evita viés de módulo
let raiz = '';
while (raiz.length < 8) {
const [b] = crypto.getRandomValues(new Uint8Array(1));
if (b < limite) raiz += pool[b % pool.length];
}
const base = raiz + '0001';
const d1 = dv(base);
return `${base}${d1}${dv(base + d1)}`;
}
export const mascarar = (c: string) =>
c.replace(/^(.{2})(.{3})(.{3})(.{4})(.{2})$/, '$1.$2.$3/$4-$5');import re
import secrets
PESOS = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
def dv(base: str) -> int:
# Valor do caractere = ord(c) - 48 (A = 17 ... Z = 42)
pesos = PESOS[13 - len(base):]
r = sum((ord(c) - 48) * p for c, p in zip(base, pesos)) % 11
return 0 if r < 2 else 11 - r
def validar_cnpj(valor: str) -> bool:
c = re.sub(r"[./-]", "", valor).upper()
if not re.fullmatch(r"[A-Z0-9]{12}[0-9]{2}", c) or len(set(c)) == 1:
return False
d1 = dv(c[:12])
return c[12:] == f"{d1}{dv(c[:12] + str(d1))}"
def gerar_cnpj(alfanumerico: bool = False) -> str:
pool = CHARS if alfanumerico else CHARS[:10]
base = "".join(secrets.choice(pool) for _ in range(8)) + "0001"
d1 = dv(base)
return f"{base}{d1}{dv(base + str(d1))}"
def mascarar(c: str) -> str:
return f"{c[:2]}.{c[2:5]}.{c[5:8]}/{c[8:12]}-{c[12:]}"import java.security.SecureRandom;
import java.util.Locale;
import java.util.regex.Pattern;
public final class Cnpj {
private static final int[] PESOS = {6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2};
private static final String CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static final Pattern FORMATO = Pattern.compile("^[A-Z0-9]{12}\d{2}$");
private static final SecureRandom RNG = new SecureRandom();
// Valor do caractere = código ASCII - 48 (A = 17 ... Z = 42)
static int dv(String base) {
int offset = 13 - base.length(), soma = 0;
for (int i = 0; i < base.length(); i++) {
soma += (base.charAt(i) - 48) * PESOS[offset + i];
}
int r = soma % 11;
return r < 2 ? 0 : 11 - r;
}
public static boolean validar(String valor) {
String c = valor.replaceAll("[./-]", "").toUpperCase(Locale.ROOT);
if (!FORMATO.matcher(c).matches() || c.chars().distinct().count() == 1) return false;
int d1 = dv(c.substring(0, 12));
int d2 = dv(c.substring(0, 12) + d1);
return c.endsWith("" + d1 + d2);
}
public static String gerar(boolean alfanumerico) {
String pool = alfanumerico ? CHARS : CHARS.substring(0, 10);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 8; i++) sb.append(pool.charAt(RNG.nextInt(pool.length())));
String base = sb.append("0001").toString();
int d1 = dv(base);
return base + d1 + dv(base + d1);
}
}using System.Linq;
using System.Security.Cryptography;
using System.Text.RegularExpressions;
public static class Cnpj
{
static readonly int[] Pesos = { 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };
const string Chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
// ECMAScript: \d aceita só 0-9 (sem dígitos Unicode)
static readonly Regex Formato = new(@"^[A-Z0-9]{12}\d{2}$", RegexOptions.ECMAScript);
// Valor do caractere = código ASCII - 48 (A = 17 ... Z = 42)
static int Dv(string b)
{
int offset = 13 - b.Length, soma = 0;
for (int i = 0; i < b.Length; i++) soma += (b[i] - 48) * Pesos[offset + i];
int r = soma % 11;
return r < 2 ? 0 : 11 - r;
}
public static bool Validar(string valor)
{
var c = Regex.Replace(valor, @"[./-]", "").ToUpperInvariant();
if (!Formato.IsMatch(c) || c.Distinct().Count() == 1) return false;
int d1 = Dv(c[..12]);
return c[12..] == $"{d1}{Dv(c[..12] + d1)}";
}
public static string Gerar(bool alfanumerico = false)
{
var pool = alfanumerico ? Chars : Chars[..10];
var raiz = new string(Enumerable.Range(0, 8)
.Select(_ => pool[RandomNumberGenerator.GetInt32(pool.Length)]).ToArray());
var b = raiz + "0001";
int d1 = Dv(b);
return $"{b}{d1}{Dv(b + d1)}";
}
}# Sem máscara, já em maiúsculas (numérico e alfanumérico)
^[A-Z0-9]{12}\d{2}$
# Com máscara XX.XXX.XXX/XXXX-XX
^[A-Z0-9]{2}\.[A-Z0-9]{3}\.[A-Z0-9]{3}/[A-Z0-9]{4}-\d{2}$
# Só o formato antigo (vai rejeitar CNPJ alfanumérico)
^\d{14}$-- BIGINT ou NUMERIC(14) quebra com letras e perde o zero à esquerda.
-- Guarde sem máscara, em maiúsculas, como texto de 14 posições (PostgreSQL):
ALTER TABLE empresa
ALTER COLUMN cnpj TYPE CHAR(14) USING LPAD(cnpj::text, 14, '0');
ALTER TABLE empresa
ADD CONSTRAINT cnpj_formato CHECK (cnpj ~ '^[A-Z0-9]{12}[0-9]{2}$');
-- Matriz e filiais da mesma empresa compartilham a raiz (8 primeiros):
SELECT LEFT(cnpj, 8) AS raiz, COUNT(*) AS estabelecimentos
FROM empresa
GROUP BY LEFT(cnpj, 8);Cenários de teste para QA
Nove casos que valem um teste automatizado antes de liberar o CNPJ alfanumérico em produção. Use o gerador de CNPJ para testes lá em cima para montar a massa de cada um.
Entrada e formatação
Com e sem máscara
O campo aceita os dois formatos e grava sempre o mesmo valor, sem pontuação.
12ABC34501DE35 e 12.ABC.345/01DE-35Letras minúsculas
A entrada é convertida para maiúsculas antes de validar e de gravar.
12.abc.345/01de-35Espaços e colagem
Espaços no início, no fim ou colados de um PDF não geram erro de tamanho.
" 12.ABC.345/01DE-35 "
Regras de validação
DV inválido
O sistema rejeita e explica o motivo. Use a opção de DV inválido do gerador para montar a massa.
11.222.333/0001-82Sequências repetidas
Passam na conta do DV e mesmo assim devem ser recusadas.
00.000.000/0000-00Matriz e filial
A mesma raiz com ordens diferentes é agrupada como a mesma empresa.
12.ABC.345/0001-88 e 12.ABC.345/0002-69
Banco, telas e integrações
Campo numérico que quebra com letras
Colunas BIGINT, input type="number" e máscaras só de dígitos falham no formato novo. Teste cada tela e cada API.
12.ABC.345/01DE-35Zero à esquerda
Ao passar por um tipo numérico, o CNPJ perde o zero inicial e fica com 13 posições.
01.234.567/0001-95Integração com NF-e
Confira se o XML (tags CNPJ de emitente e destinatário), o EDI e os web services aceitam letras, conforme a nota técnica vigente.
<CNPJ>12ABC34501DE35</CNPJ>
Outras ferramentas
Além deste gerador de CNPJ online, duas páginas para tarefas específicas.
Perguntas frequentes sobre o gerador de CNPJ
Não achou a resposta? A regra oficial está no link da Receita Federal no rodapé.
O que é um gerador de CNPJ?
Uma ferramenta que cria números de CNPJ matematicamente válidos, com os dígitos verificadores corretos, para uso em testes de software, QA e desenvolvimento. Os números não correspondem a um cadastro real na Receita Federal.
O CNPJ gerado é válido?
Sim, no sentido do algoritmo: ele passa em qualquer validação de dígito verificador. Mas não é uma empresa registrada e não serve para emitir nota fiscal, abrir conta ou fazer qualquer operação real.
É legal usar um gerador de CNPJ?
Sim, para testes e fins educacionais. Usar um CNPJ gerado para enganar alguém, em cadastros, compras ou contratos, pode configurar crime de falsidade ideológica (art. 299 do Código Penal).
O que é o CNPJ alfanumérico?
É o novo formato da Receita Federal, que combina letras (A a Z) e números nas 12 primeiras posições. Foi criado para evitar que as combinações numéricas se esgotem. O total continua sendo de 14 caracteres.
Quando o CNPJ alfanumérico começa a valer?
A partir de julho de 2026, só para novas inscrições (empresas e filiais). Os CNPJs já existentes continuam numéricos e não mudam.
Qual é o modelo de um CNPJ alfanumérico?
O formato é XX.XXX.XXX/XXXX-DV, como em 12.ABC.345/01DE-35. As 12 primeiras posições aceitam letras maiúsculas e números. Os 2 últimos são sempre dígitos numéricos.
Como gerar um CNPJ alfanumérico válido para teste?
Escolha a opção "Alfanumérico" no gerador, defina a quantidade e se quer com ou sem máscara, e clique em "Gerar". Os dígitos verificadores são calculados pelo algoritmo oficial.
Como é calculado o dígito verificador do CNPJ?
Pelo módulo 11. Cada um dos 12 primeiros caracteres é multiplicado pelos pesos 5,4,3,2,9,8,7,6,5,4,3,2 e os resultados são somados. Se o resto da divisão por 11 for menor que 2, o dígito é 0; senão, é 11 menos o resto. O segundo dígito repete o processo com 13 caracteres e os pesos 6,5,4,3,2,9,8,7,6,5,4,3,2. No formato alfanumérico, cada caractere vale o seu código ASCII menos 48 (A = 17, B = 18, ..., Z = 42).
Quantos dígitos tem o CNPJ e o que significa cada parte?
São 14. Os 8 primeiros formam a raiz (identificam a empresa). Os 4 seguintes são a ordem: 0001 é a matriz e os demais são filiais. Os 2 últimos são os dígitos verificadores.
Posso gerar CNPJ de matriz e filial?
Sim. A matriz usa a ordem 0001; filiais usam 0002, 0003 etc. com a mesma raiz. É útil para testar sistemas que agrupam estabelecimentos da mesma empresa.
Como validar um CNPJ (numérico ou alfanumérico) no meu sistema?
Remova a máscara, converta para maiúsculas, confira se tem 14 caracteres (regex ^[A-Z0-9]{12}\d{2}$), rejeite sequências repetidas e recalcule os dois dígitos verificadores. Você também pode usar o nosso validador de CNPJ.
O gerador de CNPJ é gratuito? Posso gerar vários de uma vez?
Sim, é gratuito e sem cadastro. Você pode gerar até 1000 CNPJs de uma vez e copiar ou baixar a lista em TXT, CSV ou JSON, com ou sem pontuação.