cnpjcpf.
Código · Ruby

Gerar CPF em Ruby

Método sem nenhuma gem que gera um CPF matematicamente válido para teste: sorteia 9 dígitos de base e calcula os dois verificadores pelo módulo 11. Números fictícios, só para dev e QA.

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.