Faker CPF: como gerar CPF válido com Faker em Python e JavaSc...
Faker CPF: como gerar CPF válido com Faker em Python e JavaScript
No Python, o Faker gera CPF válido com uma linha. No JavaScript, o @faker-js/faker não tem CPF. E nos dois, o CPF sai sem relação com o nome, o e-mail e o endereço da mesma “pessoa”. Este guia mostra o código de cada caso e quando vale trocar o Faker por outra coisa.
Faker CPF no Python
Instale com pip install Faker e use o locale brasileiro:
from faker import Faker
fake = Faker("pt_BR")
fake.cpf() # '529.982.247-25' com máscara
fake.ssn() # '52998224725' só dígitos
fake.rg() # '24678135X' RG no formato de SP, pode terminar em X
fake.cnpj() # '47.960.351/0001-08'
fake.cnpj(use_alphanumeric=True) # '12.ABC.345/01DE-35' (Faker 40.44.0)Os valores dos comentários são exemplos; cada chamada sorteia um número novo. O CPF tem os dois dígitos verificadores calculados por módulo 11, então passa em validação. O CNPJ numérico do Faker sempre sai com a ordem 0001 (matriz). Se precisar de filial, monte a base à mão.
Num teste com pytest, uma fixture resolve:
import pytest
from faker import Faker
@pytest.fixture
def fake():
Faker.seed(42) # mesmo CPF em toda rodada
return Faker("pt_BR")
def test_cadastro_aceita_cpf_valido(fake, client):
resposta = client.post("/clientes", json={"nome": fake.name(), "cpf": fake.cpf()})
assert resposta.status_code == 201Faker CPF no JavaScript
O @faker-js/faker (conferido na versão 10.6.0) não tem gerador de CPF, nem no locale pt_BR. Há dois caminhos. O primeiro é o pacote cpf-cnpj-validator, que gera e valida:
import { cpf, cnpj } from "cpf-cnpj-validator";
cpf.generate(); // '52998224725'
cpf.generate({ formatted: true }); // '529.982.247-25'
cpf.generate({ formatted: true, state: "SP" }); // 9º dígito = 8 (São Paulo)
cpf.isValid("529.982.247-25"); // true
cnpj.generate({ formatted: true }); // CNPJ alfanumérico, ex. '58.A0Z.919/U001-06'O segundo é escrever a conta, que cabe em poucas linhas:
function gerarCpf(): string {
const d = Array.from({ length: 9 }, () => Math.floor(Math.random() * 10));
for (const n of [9, 10]) {
const soma = d.reduce((total, v, i) => total + v * (n + 1 - i), 0);
const resto = soma % 11;
d.push(resto < 2 ? 0 : 11 - resto);
}
return d.join("");
}A regra completa do módulo 11, com exemplo resolvido do CPF, do CNPJ e do RG, está no guia do dígito verificador.
Onde o Faker não chega
Para um campo de CPF sozinho, o Faker basta. Ele começa a atrapalhar quando o teste cruza dados:
- A pessoa não bate.
fake.name(),fake.email()efake.address()são sorteados separados: o e-mail é de outro nome e o CEP é de outra cidade. Teste de checkout que confere CEP contra cidade falha sem motivo. - CPF por estado. O Faker do Python não deixa escolher o 9º dígito, que indica o estado de emissão.
- Volume em arquivo. Para um seed de milhares de linhas em CSV ou SQL, você escreve e mantém o script.
A pessoa inteira pela API do FakeForge
O preset customer da API devolve nome, CPF, e-mail, telefone e endereço da mesma pessoa: o e-mail usa o nome e o DDD e o CEP são da cidade do endereço. Sem chave, a amostra é de 3 por chamada:
curl "https://fakeforge.com.br/api/generate?preset=customer&quantity=3"
# {"preset":"customer","quantity":3,"data":[
# {"nome":"Henrique Oliveira Cardoso","cpf":"298.572.456-25",
# "email":"henriqueoliveira25@uol.com.br","telefone":"(81) 94506-2069",
# "endereco":{"cep":"50769-945","city":"Recife","stateCode":"PE", ...}}, ...]}Só o CPF também sai pela API, até 50 por chamada sem chave: curl "https://fakeforge.com.br/api/generate?type=cpf&quantity=50". No site, o gerador de CPF e o gerador de pessoa fazem o mesmo sem código.
Qual usar
- Teste unitário com um CPF: Faker no Python, função de módulo 11 ou cpf-cnpj-validator no JavaScript.
- CPF de um estado específico: cpf-cnpj-validator com
state. - Cadastro completo que cruza nome, e-mail, telefone e CEP: o preset customer da API.
- Arquivo grande para popular banco: o gerador do site, que monta CSV, JSON ou SQL.
Perguntas frequentes
O Faker do Python gera CPF válido?+
Sim. Com Faker('pt_BR'), fake.cpf() devolve um CPF com máscara (000.000.000-00) e fake.ssn() devolve só os 11 dígitos. Os dois dígitos verificadores são calculados por módulo 11, então o número passa em qualquer validador.
O @faker-js/faker tem CPF?+
Não. Até a versão 10.6.0 não existe gerador de CPF no @faker-js/faker, nem no locale pt_BR. Use uma função de módulo 11, um pacote como o cpf-cnpj-validator ou a API do FakeForge.
Como gerar CNPJ com Faker?+
No Python, fake.cnpj() com o locale pt_BR. Na versão 40.44.0, fake.cnpj(use_alphanumeric=True) gera o CNPJ alfanumérico. No JavaScript, o cnpj.generate() do cpf-cnpj-validator já devolve o formato alfanumérico.
Por que o CPF, o nome e o endereço do Faker não batem?+
Porque cada chamada é sorteada sozinha: fake.name(), fake.email() e fake.address() não sabem um do outro. Para testes que cruzam campos, gere a pessoa inteira de uma vez, como faz o preset customer da API do FakeForge.