module Faker::Russian::Okpo

Public Instance Methods

okpo(options = {}) click to toggle source
# File lib/faker/russian/okpo.rb, line 4
def okpo(options = {})
  options.assert_valid_keys(:sequence_number)

  sequence = find_sequence(options[:sequence_number])
  okpo_digits = okpo_region_numbers(sequence)
  okpo_digits + okpo_calc(okpo_digits)
end

Private Instance Methods

okpo_calc(okpo_digits) click to toggle source
# File lib/faker/russian/okpo.rb, line 22
def okpo_calc(okpo_digits)
  (okpo_digits.split(//).map(&:to_i).each_with_index.inject(0) { |s, (p, i)| s + p * (i + 1) } % 11 % 10).to_s
end
okpo_region_numbers(sequence) click to toggle source
# File lib/faker/russian/okpo.rb, line 14
def okpo_region_numbers(sequence)
  if [true, false][sequence.rand(2)]
    sprintf '%07d', sequence.rand(10_000_000)
  else
    sprintf '%09d', sequence.rand(1_000_000_000)
  end
end