← Voltar ao blog

Faker CPF: como gerar CPF válido com Faker em Python e JavaScript

·6 min de leitura

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 == 201

Faker 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() e fake.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.

Achou útil? Compartilha: