Ferramentas gratuitas para desenvolvedores. Nenhum dado real de pessoas é consultado ou armazenado.Como funciona o algoritmo do CPF →

Gerador de CNPJ em lote

Gere de 1 a 10 mil CNPJs válidos de uma vez, numéricos ou alfanuméricos, com raiz fixa opcional, e baixe o resultado em CSV ou JSON para popular bancos e testes. Gratuito, sem cadastro e processado no seu navegador.

Lote gerado no seu navegador. Nada é enviado ao servidor. Use apenas em ambientes de teste.

Para que serve

Um único CNPJ resolve o teste de um formulário. Muitos cenários, porém, precisam de volume: uma tabela de fornecedores com milhares de linhas, um teste de carga que cadastra empresas em sequência, um relatório que só faz sentido com dados suficientes para paginar e agrupar. Copiar números um a um do gerador de CNPJ não escala.

O gerador em lote produz de 1 a 10 mil CNPJs de uma vez, todos com dígitos verificadores corretos e nenhum com as doze primeiras posições iguais. Você escolhe:

  • Quantidade: de 1 a 10.000. Valores fora desse intervalo são ajustados ao limite mais próximo.
  • Formato: numérico (só dígitos) ou alfanumérico (dígitos e letras de A a Z nas doze primeiras posições).
  • Raiz fixa: opcional; oito caracteres que se repetem em todos os números do lote.
  • Pontuação: com máscara (00.000.000/0000-00) ou só os caracteres.

O resultado aparece em uma caixa de texto, um CNPJ por linha, e pode ser copiado de uma vez ou baixado como CSV ou JSON.

O lote alfanumérico ganhou importância porque, desde julho de 2026, a Receita Federal emite CNPJs com letras para novas inscrições (IN RFB nº 2.229/2024), enquanto os numéricos existentes não mudam. Um banco de homologação realista precisa dos dois. Gerar alguns milhares de alfanuméricos e rodar o sistema contra eles é um jeito rápido de achar colunas numéricas, regex com \d e conversões para inteiro que ainda não foram ajustadas; o guia CNPJ alfanumérico: o que muda no seu sistema lista onde procurar.

Raiz fixa: um grupo com várias filiais

A raiz, as oito primeiras posições, identifica a empresa. A ordem, as quatro seguintes, identifica o estabelecimento. Quando você informa uma raiz fixa, todos os números do lote pertencem à mesma empresa e só a ordem e os dígitos verificadores mudam. Com a raiz 12ABC345 no formato alfanumérico, por exemplo, o lote traz números como 12.ABC.345/BSII-76, 12.ABC.345/HNLK-61 e 12.ABC.345/YNF8-03.

Isso serve para testar regras que dependem do agrupamento: relatórios consolidados por empresa, limites de crédito compartilhados entre estabelecimentos, validações que exigem que uma filial pertença ao mesmo grupo da matriz.

Três detalhes:

  • A ordem é sorteada, não sequencial. Para uma matriz seguida de filiais 0002, 0003 e assim por diante, use a opção “Gerar matriz + filiais” do gerador de CNPJ.
  • Repetições ficam mais prováveis. Com a raiz fixa, só a ordem varia. No formato numérico, a ordem tem 10 mil combinações (0000 a 9999), e um lote grande na mesma raiz vai repetir números; no alfanumérico, são 36⁴ = 1.679.616, e as repetições são bem mais raras.
  • A raiz precisa combinar com o formato. No formato numérico, ela só aceita dígitos; no alfanumérico, aceita letras também. Uma raiz inválida mostra um aviso e o lote não é gerado.

O papel de cada bloco do número está no guia sobre raiz, ordem e dígitos do CNPJ.

CSV ou JSON

Os dois arquivos contêm os mesmos números; o que muda é quem vai ler.

O CSV (cnpjs.csv) tem a coluna cnpj na primeira linha e um número por linha depois dela. É o formato certo para importar em banco de dados, abrir em planilha ou processar na linha de comando. Ao abrir em planilha, defina a coluna como texto: um CNPJ numérico tratado como número perde zeros à esquerda.

O JSON (cnpjs.json) é um array de strings. É o formato mais prático para fixtures de testes automatizados, porque qualquer linguagem o lê sem configuração:

import { readFileSync } from 'node:fs';

const cnpjs = JSON.parse(readFileSync('cnpjs.json', 'utf8'));
const alfanumericos = cnpjs.filter((c) => /[A-Z]/.test(c));
console.log(cnpjs.length, alfanumericos.length);

Se o destino é um banco, prefira CSV. Se o destino é código, prefira JSON.

Importar no banco (\copy, LOAD DATA)

Para importação, gere o lote no modo “Só caracteres”. Guarde o CNPJ como texto de 14 posições, sem pontuação e em maiúsculas: colunas numéricas, como bigint, não comportam letras. Os exemplos partem de uma tabela de teste com uma coluna cnpj.

No PostgreSQL, o comando \copy do psql lê o arquivo da sua máquina e envia para o servidor. HEADER pula a linha do cabeçalho:

importar-postgresql.sql
CREATE TABLE fornecedores_teste (
id   serial PRIMARY KEY,
cnpj char(14) NOT NULL CHECK (cnpj ~ '^[A-Z0-9]{12}[0-9]{2}$')
);

\copy fornecedores_teste (cnpj) FROM 'cnpjs.csv' WITH (FORMAT csv, HEADER true)

O CHECK confere só o formato, não os dígitos verificadores; ele já basta para impedir que um valor com pontuação ou minúsculas entre na tabela. O comando SQL COPY ... FROM 'arquivo', sem a barra, lê o arquivo no servidor e exige permissões específicas; para um arquivo baixado no seu computador, \copy é o caminho direto.

No MySQL, use LOAD DATA LOCAL INFILE. IGNORE 1 LINES pula o cabeçalho:

CREATE TABLE fornecedores_teste (
  id   INT AUTO_INCREMENT PRIMARY KEY,
  cnpj CHAR(14) NOT NULL
);

LOAD DATA LOCAL INFILE 'cnpjs.csv'
  INTO TABLE fornecedores_teste
  FIELDS TERMINATED BY ','
  LINES TERMINATED BY '\n'
  IGNORE 1 LINES
  (cnpj);

O LOCAL exige que a opção local_infile esteja habilitada no servidor e no cliente. Se a tabela tem UNIQUE na coluna cnpj, principalmente em lotes com raiz fixa, remova duplicatas antes de importar ou deixe o banco descartá-las. No PostgreSQL, \copy e COPY não têm cláusula de conflito: importe para uma tabela de staging e copie com INSERT INTO ... SELECT ... ON CONFLICT DO NOTHING. No MySQL, LOAD DATA ... IGNORE INTO TABLE ignora as linhas que violariam a chave única. Para a expressão de formato em outras linguagens, veja o guia de regex para CNPJ.

Limites e desempenho

O lote é calculado inteiramente no navegador. Cada CNPJ exige duas somas de doze ou treze multiplicações, e até 10 mil números ficam prontos rapidamente em um computador comum. O arquivo é montado na própria página e baixado sem passar por nenhum servidor.

Além do cálculo, a página precisa exibir o resultado na caixa de texto, e listas muito grandes deixam a rolagem e a cópia mais pesadas; por isso o lote vai até 10 mil. Para mais números, gere vários lotes ou leve a geração para o seu código.

A API pública oferece o mesmo recurso para scripts e pipelines:

GET https://www.cpf.dev.br/api/v1/cnpj/gerar?quantidade=1000&formato=alfanumerico&formatado=false

Cada chamada devolve até 1000 CNPJs no campo cnpjs, aceita raiz para fixar as oito primeiras posições e permite até 60 requisições por minuto por IP, sem chave. Para dezenas de milhares de registros em um seed, costuma ser mais simples copiar a função de geração da página de código da sua linguagem, como JavaScript ou Python, e gerar localmente. Se precisar de casos específicos, válidos e inválidos, para testes de borda, a página de exemplos de CNPJ alfanumérico para teste reúne uma lista pronta.

Perguntas frequentes

Os CNPJs de um lote podem se repetir?

Podem. Cada número é sorteado de forma independente. Sem raiz fixa, repetições são raras; com raiz fixa, só a ordem varia e elas ficam mais frequentes. Remova duplicatas antes de importar em uma coluna única.

Qual o máximo de CNPJs por lote?

10 mil na ferramenta e 1000 por chamada na API. Para volumes maiores, gere vários lotes ou use a função de geração no seu código.

Posso misturar numéricos e alfanuméricos no mesmo lote?

Cada lote usa um formato. Gere um lote de cada e junte os arquivos: o CSV tem o mesmo cabeçalho e o JSON é um array simples, então a união é direta.

Posso usar o lote em produção?

Não. Os números servem para desenvolvimento, homologação e testes. Eles podem coincidir com um CNPJ real por acaso e não devem entrar em cadastros reais.

O lote é gerado no servidor?

Não. Todo o lote é calculado no seu navegador e o arquivo é montado localmente. Nada é enviado ao servidor.