FakeForge vs Mockaroo vs Faker.js: qual gera dados brasileiro...
FakeForge vs Mockaroo vs Faker.js: qual gera dados brasileiros de verdade?
Escolher a ferramenta errada para gerar dados de teste custa horas de debug. Um CPF com dígito verificador inválido quebra a validação no back-end antes do primeiro console.log. Um endereço onde o CEP não corresponde à cidade derruba o formulário de checkout no step de entrega. Este artigo compara FakeForge BR, Mockaroo e Faker.js em critérios objetivos: checksum, coerência geográfica, suporte a PIX e CNPJ Alfanumérico, export SQL e LGPD.
O que cada ferramenta faz — e para quem foi feita
FakeForge BR — gerador focado no mercado brasileiro
FakeForge BR é uma aplicação web e API REST construída especificamente para o mercado brasileiro. Gera CPF, CNPJ, CEP, PIX, cartões com Luhn, RG, CNH, CIN, PIS/PASEP, Título de Eleitor e dados de pessoa, empresa e endereço — tudo com validação de formato embutida na geração. A API está disponível em /api/generate com saída em JSON, CSV ou SQL.
Mockaroo — plataforma SaaS de dados genéricos
Mockaroo é uma plataforma SaaS americana para geração de dados tabulares em qualquer domínio. Suporta mais de 180 tipos de campo, mas nenhum deles é CPF ou CNPJ nativo. A interface web serve bem times não-técnicos que precisam de planilhas de teste. A API custa a partir de USD 50/mês para volume relevante.
Faker.js — biblioteca open-source para Node/browser
Faker.js é uma biblioteca JavaScript/TypeScript open-source com suporte a múltiplos locales, incluindo pt_BR. Roda no seu próprio processo, sem dependência de rede. O locale brasileiro existe, mas a manutenção é comunitária — e os gaps para dados financeiros e documentos são conhecidos.
---
CPF e CNPJ com dígito verificador correto
Dado inválido em teste não é dado de teste — é ruído. Um formulário que valida CPF no front-end vai rejeitar qualquer número gerado sem o algoritmo mod-11 correto, interrompendo o fluxo antes de chegar ao back-end.
Por que checksum mod-11 é obrigatório em testes reais
O CPF usa dois dígitos verificadores calculados por multiplicação dos nove primeiros algarismos por pesos decrescentes, módulo 11. O CNPJ usa sequência similar com pesos 2–9 aplicados duas vezes. Qualquer número gerado por string aleatória falha nesse cálculo em 99% dos casos.
Faker.js br locale gera CPF válido? (resultado do teste)
Sim — faker.br.cpf() calcula o dígito corretamente. O código abaixo é um ponto de comparação real:
import { faker } from '@faker-js/faker/locale/pt_BR';
const cpf = faker.br.cpf(); // ex: "123.456.789-09"
console.log(cpf);O problema aparece fora do CPF. Faker.js não tem faker.br.cnpj() com checksum verificável na versão estável, não tem PIX, não tem Luhn para BINs brasileiros (Elo, Hipercard) e não tem endereço correlacionado.
Mockaroo não possui tipo CPF nativo — o workaround e seus limites
Mockaroo não tem campo CPF. O workaround comum é usar "Custom List" com uma lista pré-gerada de CPFs válidos ou uma fórmula no campo "Formula". Ambas as abordagens exigem trabalho manual e não escalam — ninguém vai manter uma lista de 50 mil CPFs válidos atualizada.
FakeForge valida o dígito na geração e expõe /validar-cpf
O gerador de CPF da FakeForge calcula os dígitos verificadores no servidor antes de retornar o resultado. O round-trip abaixo confirma isso:
// Round-trip test: gera CPF e valida na mesma API
async function roundTripCPF(): Promise<void> {
const gen = await fetch(
'https://fakeforge.com.br/api/generate?type=cpf&quantity=1'
);
const { data } = await gen.json();
const cpf: string = data[0].cpf;
const val = await fetch(
`https://fakeforge.com.br/api/validar-cpf?cpf=${cpf}`
);
const { valid } = await val.json();
console.log(`CPF: ${cpf} | válido: ${valid}`); // sempre true
}
roundTripCPF();---
CNPJ Alfanumérico: suporte antes da vigência de 01/07/2026
O que muda na Instrução Normativa RFB 2.237/2024
A Instrução Normativa RFB 2.237/2024 altera o formato do CNPJ para aceitar letras nas oito primeiras posições, mantendo os dois dígitos verificadores no final. A vigência obrigatória começa em 01/07/2026. Sistemas que fazem parseInt() ou validam com regex ^\d{14}$ vão quebrar na primeira empresa com CNPJ alfanumérico.
Estado atual de cada ferramenta
- Faker.js: sem suporte a CNPJ Alfanumérico na versão estável. O locale
pt_BRgera apenas o formato numérico. - Mockaroo: sem tipo CNPJ nativo, muito menos alfanumérico.
- FakeForge: o gerador de CNPJ Alfanumérico já está disponível, com cálculo correto dos dígitos verificadores no novo formato.
DICA: Se você tem sistemas que vão receber CNPJ Alfanumérico após 01/07/2026, comece os testes de regressão agora. O FakeForge já gera o formato novo — não espere a vigência para descobrir o bug em produção.
---
Endereços brasileiros correlacionados vs campos independentes
Formulários de endereço no Brasil dependem de coerência entre CEP, bairro, cidade e estado. Um CEP com prefixo 01 pertence a São Paulo-SP. Um com prefixo 40 pertence a Salvador-BA. Se esses campos não forem gerados juntos, seus testes de formulário vão passar com dados que nenhum sistema de validação real aceitaria.
Como Faker.js gera endereço BR (campos soltos, sem coerência geográfica)
import { faker } from '@faker-js/faker/locale/pt_BR';
const endereco = {
cep: faker.location.zipCode('########'), // sem correlação geográfica
cidade: faker.location.city(), // cidade aleatória
estado: faker.location.state(), // pode não bater com a cidade
bairro: faker.location.street(), // retorna rua, não bairro
};
// Resultado possível:
// { cep: '83729-041', cidade: 'São Paulo', estado: 'Minas Gerais', bairro: 'Rua das Flores' }
// CEP de PR, cidade SP, estado MG — incoerente para qualquer validaçãoMockaroo com dataset importado: funciona, mas exige setup manual
Mockaroo permite importar um dataset CSV com CEPs reais e configurar joins entre colunas para garantir coerência. O resultado final é válido — mas você precisa manter o dataset, atualizá-lo quando cidades mudam de nome e reconfigurar as relações a cada schema novo.
FakeForge: CEP, bairro, cidade e estado do mesmo estado por design
O gerador de endereço da FakeForge garante que todos os campos de endereço pertencem à mesma região geográfica. CEP prefix, bairro, cidade e estado são selecionados de um conjunto de referência coerente para os estados cobertos — sem configuração manual.
---
PIX, cartão de crédito e dados financeiros com formato BACEN
Chaves PIX nos quatro formatos
O BACEN define quatro tipos de chave PIX: CPF/CNPJ, email, telefone (E.164) e chave aleatória (UUID v4). Testes de integração com gateways de pagamento precisam dos quatro formatos. O gerador de PIX da FakeForge entrega todos eles:
curl "https://fakeforge.com.br/api/generate?type=pix&quantity=5&format=json"
# Saída esperada (campos anotados):
# {
# "data": [
# { "type": "cpf", "key": "123.456.789-09" }, # CPF válido mod-11
# { "type": "cnpj", "key": "12.345.678/0001-90" },
# { "type": "email", "key": "joao.silva@gmail.com" },
# { "type": "telefone", "key": "+5511987654321" }, # E.164 com DDD válido
# { "type": "aleatoria", "key": "a1b2c3d4-e5f6-7890-..." } # UUID v4
# ]
# }Cartões com algoritmo de Luhn e BINs reais (Visa, Mastercard, Elo, Hipercard, Amex)
O gerador de cartão usa BINs reais das bandeiras brasileiras e aplica o algoritmo de Luhn para o último dígito. Elo e Hipercard — inexistentes no Faker.js pt_BR — estão incluídas.
O que Mockaroo e Faker.js entregam nesse domínio
Mockaroo tem um campo "Credit Card Number" genérico com Luhn, mas sem BINs brasileiros. Faker.js tem faker.finance.creditCardNumber() com Luhn, mas sem Elo ou Hipercard. PIX como conceito não existe em nenhum dos dois.
---
API REST vs biblioteca vs interface web — o modelo certo para cada caso de uso
CI/CD e seed de banco: quando uma API com endpoint /api/generate é a resposta mais simples
Em pipelines de CI, você quer uma chamada HTTP que retorna dados prontos — sem instalar dependências, sem manter código de geração no repositório. A API REST da FakeForge aceita GET com query params ou POST com JSON body:
// Seed de banco com a API FakeForge — format=sql entrega schema + INSERTs prontos
async function seedDatabase(db: { query: (sql: string) => Promise<void> }): Promise<void> {
const res = await fetch(
'https://fakeforge.com.br/api/generate?type=pessoa&quantity=50&format=sql',
{ headers: { Authorization: `Bearer ${process.env.FAKEFORGE_API_KEY}` } }
);
if (!res.ok) throw new Error(`FakeForge API: ${res.status}`);
const sql = await res.text();
await db.query(sql); // CREATE TABLE + 50 INSERTs em uma chamada
}Faker.js no código: controle total, mas manutenção do locale BR é sua responsabilidade
Faker.js é a escolha certa quando você quer zero dependência externa e aceita manter o código de geração. O risco: o locale pt_BR tem contribuidores esporádicos — bugs como nome de bairro em inglês ou DDD inválido existem no histórico do repositório.
Mockaroo API: plano pago a partir de USD 50/mês para volume razoável
O plano gratuito do Mockaroo limita a 200 linhas por download e não inclui acesso à API. O plano Developer (USD 50/mês) libera a API com até 100 mil linhas/mês. Para times brasileiros, isso representa aproximadamente R$ 280/mês na cotação de maio de 2026.
FakeForge freemium: 100 chamadas/dia grátis, plano Dev R$29
A FakeForge oferece 100 chamadas de API por dia no plano gratuito. O plano Dev custa R$29/mês para uso individual. O plano Team custa R$79/mês para times com volume maior.
---
Export SQL com CREATE TABLE pronto — diferencial para seed de banco
Como o parâmetro format=sql da FakeForge gera schema + INSERT em uma chamada
-- Output de /api/generate?type=cpf&quantity=3&format=sql
CREATE TABLE IF NOT EXISTS cpf_data (
id SERIAL PRIMARY KEY,
cpf VARCHAR(14) NOT NULL,
cpf_limpo VARCHAR(11) NOT NULL
);
INSERT INTO cpf_data (cpf, cpf_limpo) VALUES
('123.456.789-09', '12345678909'),
('987.654.321-00', '98765432100'),
('456.789.123-87', '45678912387');O schema é gerado automaticamente com base no tipo solicitado e funciona para todos os 16 tipos disponíveis.
Mockaroo também tem SQL export — comparação lado a lado
Mockaroo gera SQL export com CREATE TABLE e INSERT INTO. A diferença: você configura o schema manualmente na interface antes de exportar. Para dados genéricos o Mockaroo é competitivo nessa funcionalidade. Para CPF, CNPJ ou PIX, o schema precisa ser construído com campos customizados — sem garantia de checksum.
Faker.js não exporta SQL nativamente (você monta o script)
Com Faker.js, você escreve o template SQL manualmente. Isso não é um problema — é uma biblioteca, não um serviço de export — mas o custo de manutenção do template e do schema fica no seu repositório.
---
LGPD Art. 7º, IX e o uso de dados fictícios em testes
Por que dados reais de produção em ambiente de dev violam a base legal
A LGPD Art. 7º, IX permite o tratamento de dados pessoais quando necessário para atender aos interesses legítimos do controlador — mas usar base de clientes reais em ambiente de desenvolvimento não se enquadra nessa base legal. Ambientes de dev tipicamente têm controles de segurança menores, mais pessoas com acesso e logs não auditados.
O que "LGPD-safe" significa na prática: nenhum dado real armazenado ou processado
Ferramentas de dados fictícios são LGPD-safe quando não coletam, armazenam nem processam dados pessoais reais. A FakeForge gera dados algoritmicamente — não existe banco de dados com CPFs reais sendo "amostrados". O mesmo vale para Faker.js (execução local) e Mockaroo (sem input de dados reais do usuário).
AVISO: "Anonimizar" dados de produção com substituição simples de campos — por exemplo, trocar o nome por faker.person.firstName() mantendo o CPF original — não é suficiente para fins de LGPD. O CPF sozinho é dado pessoal diretamente identificável (LGPD Art. 5º, I). Use dados inteiramente sintéticos, sem nenhuma correlação com titulares reais.Como documentar a escolha da ferramenta de dados fictícios no RIPD
O Relatório de Impacto à Proteção de Dados (RIPD) deve registrar que o ambiente de teste usa dados inteiramente fictícios, gerados por ferramenta específica (nome, versão, URL), sem correlação com titulares reais. Uma linha de justificativa adequada: "Dados de teste gerados pela API FakeForge BR (fakeforge.com.br), algoritmo determinístico sem base em dados reais, em conformidade com LGPD Art. 7º."
---
Tabela de decisão: critérios objetivos lado a lado
Matriz de funcionalidades
| Critério | FakeForge BR | Mockaroo | Faker.js |
|---|---|---|---|
| CPF com mod-11 | Sim | Não nativo | Sim (pt_BR) |
| CNPJ com checksum | Sim | Não nativo | Parcial |
| CNPJ Alfanumérico (2026) | Sim | Não | Não |
| PIX (4 formatos BACEN) | Sim | Não | Não |
| Elo / Hipercard + Luhn | Sim | Não | Não |
| Endereço correlacionado BR | Sim | Setup manual | Não |
Export SQL com CREATE TABLE | Sim | Sim | Não nativo |
| API REST | Sim | Sim (pago) | N/A (biblioteca) |
| Preço da API | R$ 29/mês | ~R$ 280/mês | Grátis |
| Zero dependência externa | Não | Não | Sim |
Quando usar Faker.js mesmo assim (projeto open-source, sem dependência externa)
Se o projeto é open-source, não pode ter dependência de serviço externo e os dados necessários são cobertos pelo locale pt_BR (CPF, nomes, emails básicos), Faker.js é a escolha correta. O custo de manter o locale é menor do que justificar uma dependência de rede em um projeto público.
Quando Mockaroo ainda faz sentido (times com dados não-BR e orçamento em dólar)
Mockaroo é competitivo para times multinacionais que precisam de dados de múltiplos países em um único schema, com interface visual para usuários não-técnicos. Se o time já paga em dólar e precisa de dados americanos, europeus e brasileiros no mesmo dataset, o Mockaroo unifica isso — mesmo que os dados BR sejam mais limitados.
---
Migração prática de Faker.js para a API FakeForge em 15 linhas
Antes: faker.helpers.fake() com locale pt_BR
import { faker } from '@faker-js/faker/locale/pt_BR';
// Geração local com Faker.js — sem PIX, sem endereço correlacionado, sem CNPJ alfanumérico
const pessoas = Array.from({ length: 50 }, () => ({
nome: `${faker.person.firstName()} ${faker.person.lastName()}`,
cpf: faker.br.cpf(),
email: faker.internet.email(),
}));Depois: fetch para /api/generate com tipagem TypeScript
interface Pessoa {
nome: string;
cpf: string;
email: string;
pix: string;
endereco: string;
}
async function gerarPessoas(quantidade: number): Promise<Pessoa[]> {
const url = new URL('https://fakeforge.com.br/api/generate');
url.searchParams.set('type', 'pessoa');
url.searchParams.set('quantity', String(quantidade));
url.searchParams.set('format', 'json');
const res = await fetch(url.toString(), {
headers: { Authorization: `Bearer ${process.env.FAKEFORGE_API_KEY}` },
});
if (!res.ok) throw new Error(`FakeForge API: ${res.status}`);
const { data } = await res.json();
return data as Pessoa[];
}
const pessoas = await gerarPessoas(50);
// dados com CPF válido, PIX, endereço correlacionado e tipagem garantidaA mudança remove a dependência do pacote @faker-js/faker do pipeline e centraliza a lógica de geração. Usando format=sql no lugar de json, você elimina também o passo de montar o INSERT manualmente.
---
Resumo
- CPF e CNPJ com checksum correto são obrigatórios para testes reais; Faker.js cobre CPF, mas falha em dados financeiros BR e no novo formato de CNPJ.
- CNPJ Alfanumérico entra em vigor em 01/07/2026 — apenas o FakeForge já suporta o novo formato; sistemas que validam com regex
\d{14}precisam de testes de regressão agora. - Endereços correlacionados (CEP + cidade + estado coerentes) só existem no FakeForge por design; Faker.js gera campos independentes sem garantia geográfica.
- LGPD Art. 7º, IX exige dados inteiramente sintéticos em ambientes de teste — anonimização parcial de dados reais não é suficiente.
- Para projetos open-source sem dependência externa, Faker.js é a escolha válida; para APIs, pipelines de CI e seed de banco com dados BR completos, a API FakeForge é mais direta com custo menor que o Mockaroo.
- A comparação completa de alternativas cobre outros geradores além dos três analisados aqui.
Perguntas frequentes
Como o FakeForge garante CPFs únicos ao gerar lotes grandes?+
O FakeForge gera CPFs aleatoriamente no espaço de 10^11 valores válidos. Colisões em lotes de até 10 mil são estatisticamente irrelevantes (probabilidade é ~10^-7). Se seu banco tem UNIQUE constraint, raros duplicados retornarão erro — capture-os e regenere o lote específico.
Como usar a API FakeForge em CI/CD sem expor a API key?+
Configure a chave como secret no GitHub Actions (Settings > Secrets), acesse via `${{ secrets.FAKEFORGE_API_KEY }}`. Passe ao script via variável de ambiente. A chave não aparece em logs ou artifacts — é mascarada automaticamente pelo GitHub.
Qual a latência esperada ao solicitar 10.000 registros da API FakeForge?+
Geração de 10 mil itens leva ~500ms–2s dependendo do tipo. Pessoa com endereço é mais lenta que CPF puro. Para volumes maiores, chunque em blocos de 5 mil com rate limit de 1 chamada/s. Timeout recomendado: 10s.
Se gero 100 mil CPFs em testes, qual risco de colisão com dados reais?+
CPF tem 11 dígitos (~10^11 valores). Colisão acidental é improvável. Risco real é cruzamento com produção. Solução: use ranges específicos para testes (ex: CPFs iniciando com 999), valide antes de importar. LGPD: dados fictícios são obrigatórios.
FakeForge suporta seed determinístico como Faker.js?+
Não — a API gera dados aleatórios a cada chamada. Para testes reprodutíveis, exporte JSON na primeira execução, comite no repositório e reutilize. Ou mantenha Faker.js com seed fixo para cenários que exigem replay determinístico absoluto.