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,0003e 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 (
0000a9999), 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:
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.