cnpjcpf.
Código · Ruby

Gerar CNPJ em Ruby

Método sem nenhuma gem que gera um CNPJ matematicamente válido para teste — numérico ou alfanumérico, com o parâmetro alpha. Reusa os pesos W1/W2 e o dv do validador (módulo 11 com ASCII−48).

O método

O generate_cnpj reusa os pesos W1/W2 e o dv do validador — o mesmo dv com base[i].ord - 48 que trata dígito e letra de forma uniforme. Por isso o bloco abaixo traz os dois juntos.

Ruby
W1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2].freeze
W2 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2].freeze
SET_GEN = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'.freeze

def dv(base, w)
  s = w.each_with_index.sum { |p, i| (base[i].ord - 48) * p }
  r = s % 11
  r < 2 ? 0 : 11 - r
end

def generate_cnpj(alpha = false)
  base = Array.new(8) { alpha ? SET_GEN[rand(36)] : rand(10).to_s }.join
  base += '0001'
  d1 = dv(base, W1)
  d2 = dv(base + d1.to_s, W2)
  base + d1.to_s + d2.to_s
end

generate_cnpj             # => '11222333000181'  (numérico)
generate_cnpj(true)       # => '12ABC34501DE35'  (alfanumérico)

Monta 8 posições de base (dígitos com rand(10), ou letras+dígitos quando alpha), fixa a ordem da matriz em 0001 e calcula os dois verificadores. O alpha só troca o alfabeto da base; o cálculo do DV é o mesmo, com a conversão base[i].ord - 48. Os 2 verificadores são sempre numéricos.

Detalhe: com alpha = true a base é puramente aleatória sobre 36 símbolos, então existe uma chance mínima (~0,002%) de sair só com dígitos — ainda um CNPJ válido. Se quiser forçar ao menos uma letra na raiz, trate isso fora do método.

Por que o exemplo SERPRO confere

A base oficial 12ABC34501DE produz DV 35: no 1º dígito a soma dá 459 (resto 8 → 11 - 8 = 3) e no 2º a soma dá 424 (resto 6 → 11 - 6 = 5). O método acima reproduz exatamente isso. Detalhe do cálculo em calcular o dígito verificador alfanumérico.

publicidade

Cuidados

  • Número fictício, não real. O método gera um CNPJ que passa no módulo 11, mas não corresponde a empresa nenhuma. É para teste de software e QA — ver se é legal gerar CPF/CNPJ e CNPJ válido vs. CNPJ real.
  • Válido ≠ existe. Consistência matemática não é registro na Receita.
  • Sequências repetidas são tecnicamente consistentes; o validador as reprova com cnpj.chars.uniq.length == 1, mas o gerador quase nunca as produz.
  • Alfanumérico entra em jul/2026 (IN RFB nº 2.229/2024), só para novos registros. O parâmetro alpha já antecipa o formato.
  • Guarde sem máscara (só os 14 caracteres) e formate só na exibição.

Continue

Perguntas frequentes

Como gerar um CNPJ válido em Ruby?
Com um método que monta 8 posições de base, fixa a ordem da matriz em 0001 e calcula os dois verificadores pelo módulo 11 reusando o dv e os pesos W1/W2 do validador.
Como gerar CNPJ alfanumérico em Ruby?
Passe alpha = true: a base passa a sortear sobre 36 símbolos (A–Z e 0–9) em vez de só dígitos. O cálculo do DV é o mesmo e os dois verificadores continuam numéricos.
O CNPJ gerado é de uma empresa real?
Não. O método produz um número que passa no módulo 11, mas não corresponde a empresa nenhuma — veja CNPJ válido vs. CNPJ real.
Código verificado: a saída passa no validador (módulo 11 com ASCII−48; exemplo SERPRO 12ABC34501DE→35). Números fictícios para teste. Revisado em 06/2026.