class DockCheck::Snils

Public Class Methods

check(document) click to toggle source
# File lib/dockcheck/snils.rb, line 8
def self.check(document)
  snils = DockHelper.numberize_document(document[:content])

  case snils.count
  when 11
    last_digits = document[:content].slice(9, 10).to_i
    document[:correct] = snils_valid?(snils, last_digits)
  else
    document[:error] = 'Incorrect snils numbers count!'
  end

  document
end
name() click to toggle source
# File lib/dockcheck/snils.rb, line 22
def self.name
  :snils
end

Private Class Methods

check_control_sum(control_sum) click to toggle source
# File lib/dockcheck/snils.rb, line 35
def self.check_control_sum(control_sum)
  if control_sum < 100
    control_sum
  elsif control_sum == 100
    0
  else
    rem = control_sum % 101
    rem == 100 ? 0 : rem
  end
end
control_sum_calc(inn, coefficients) click to toggle source
# File lib/dockcheck/snils.rb, line 28
def self.control_sum_calc(inn, coefficients)
  inn
    .zip(coefficients)
    .filter { |(a, b)| !b.nil? }
    .reduce(0) { |acc, (a, b)| a * b + acc }
end
snils_valid?(snils, last_digits) click to toggle source
# File lib/dockcheck/snils.rb, line 46
def self.snils_valid?(snils, last_digits)
  control_sum = control_sum_calc(snils, @@coefficients_map)
  last_digits == check_control_sum(control_sum)
end