A função
Sorteia os 9 dígitos da base e calcula os dois verificadores pelo mesmo módulo 11 da validação. O resultado é sempre um CPF matematicamente válido.
Python
import random
def _dv_cpf(nums, peso_inicial: int) -> int:
soma = sum(n * (peso_inicial - i) for i, n in enumerate(nums))
resto = soma % 11
return 0 if resto < 2 else 11 - resto
def generate_cpf(mask: bool = False) -> str:
base = [random.randint(0, 9) for _ in range(9)]
d1 = _dv_cpf(base, 10)
d2 = _dv_cpf(base + [d1], 11)
s = ''.join(map(str, base + [d1, d2]))
if mask:
return f'{s[0:3]}.{s[3:6]}.{s[6:9]}-{s[9:11]}'
return s
generate_cpf() # '52998224725'
generate_cpf(mask=True) # '529.982.247-25'É o inverso da validação: em vez de conferir os dígitos verificadores, a função os calcula. Os pesos são 10..2 para o 1º DV e 11..2 para o 2º.
Em lote
Para popular uma base de teste, gere quantos precisar — todos únicos do ponto de vista do cálculo, ainda que possa haver repetição em volumes grandes:
Python
lote = [generate_cpf() for _ in range(1000)]publicidade
Cuidados
- Válido ≠ real. O CPF gerado passa no módulo 11, mas não foi emitido pela Receita a ninguém. Serve para teste e QA.
- Use só para desenvolvimento. Usar um número fictício para se passar por outra pessoa é crime. Veja é legal gerar CPF?.
- O 9º dígito é a região fiscal. Se você precisa de CPF "por estado", fixe esse dígito antes de calcular os DV — explicação em região fiscal do CPF.
- Guarde sem máscara e formate só na exibição.
Continue
Gerador verificado por execução: milhares de CPFs gerados e validados pela função de validação oficial, todos válidos. Algoritmo módulo 11. Revisado em 06/2026.