O método
Ruby
def dv_cpf(b)
n = b.length
s = (0...n).sum { |i| b[i].to_i * ((n + 1) - i) }
r = s % 11
r < 2 ? 0 : 11 - r
end
def generate_cpf
base = Array.new(9) { rand(10) }.join
d1 = dv_cpf(base)
d2 = dv_cpf(base + d1.to_s)
base + d1.to_s + d2.to_s
end
generate_cpf # => '11144477735'Sorteia 9 dígitos de base com rand(10), calcula o 1º verificador sobre esses 9 dígitos e o 2º sobre os 10 (já incluindo o 1º DV, com base + d1.to_s). O resto da divisão por 11 vira o dígito: r < 2 ? 0 : 11 - r. É o módulo 11 aplicado para frente.
Como ler o método
O dv_cpf é genérico: recebe a base como string e multiplica cada caractere por um peso decrescente que começa em n + 1, onde n é o tamanho. Para os 9 dígitos isso dá pesos 10..2; para os 10 (base + 1º DV), 11..2. Por isso o mesmo método serve para os dois verificadores — basta chamar de novo com o 1º DV já anexado.
publicidade
Cuidados
- Número fictício, não real. O método gera um CPF que passa no módulo 11, mas não corresponde a nenhuma pessoa. É para teste de software e QA — ver se é legal gerar CPF/CNPJ.
- Válido ≠ existe. Consistência matemática não é emissão pela Receita. Não use saída de gerador como dado de pessoa real.
- Sequências repetidas (
'11111111111') são tecnicamente consistentes no módulo 11; o validador as reprova de propósito, mas o gerador quase nunca as produz (base aleatória). - A matriz é sempre
0001? Isso é do CNPJ. No CPF os 9 dígitos de base são todos aleatórios; só os 2 verificadores são calculados. - Guarde sem máscara (só os 11 dígitos) e formate só na exibição.
Continue
Perguntas frequentes
Como gerar um CPF válido em Ruby?
Com um método que sorteia 9 dígitos de base com
rand(10) e calcula os dois dígitos verificadores pelo módulo 11. Sem nenhuma gem, só a biblioteca padrão.O CPF gerado é de uma pessoa real?
Não. O método produz um número que passa no módulo 11, mas não corresponde a ninguém. É para teste de software e QA — veja se é legal gerar CPF/CNPJ.
Preciso de uma gem para gerar CPF?
Não. O método abaixo usa só
rand e Array/String da stdlib. Se preferir uma gem mantida, há cpf_cnpj (de fnando), que também gera e formata.Código verificado: a saída passa no validador (módulo 11 oficial). Números fictícios para teste de software. Revisado em 06/2026.