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