class DockCheck::Inn
Public Class Methods
check(document)
click to toggle source
# File lib/dockcheck/inn.rb, line 10 def self.check(document) inn = DockHelper.numberize_document(document[:content]) case inn.count when 10 document[:correct] = ten_digit_inn_valid?(inn) when 12 document[:correct] = twelve_digit_inn_valid?(inn) else document[:error] = 'Incorrect inn numbers count!' end document end
name()
click to toggle source
# File lib/dockcheck/inn.rb, line 25 def self.name :inn end
Private Class Methods
control_sum_calc(inn, coefficients)
click to toggle source
# File lib/dockcheck/inn.rb, line 31 def self.control_sum_calc(inn, coefficients) inn .zip(coefficients) .filter { |(a, b)| !b.nil? } .reduce(0) { |acc, (a, b)| a * b + acc } end
sum_div(number)
click to toggle source
# File lib/dockcheck/inn.rb, line 38 def self.sum_div(number) number % 11 % 10 end
ten_digit_inn_valid?(inn)
click to toggle source
# File lib/dockcheck/inn.rb, line 42 def self.ten_digit_inn_valid?(inn) last_number = inn.last control_sum = control_sum_calc(inn, @@ten_digits_map) last_number == sum_div(control_sum) end
twelve_digit_inn_valid?(inn)
click to toggle source
# File lib/dockcheck/inn.rb, line 48 def self.twelve_digit_inn_valid?(inn) last_number = inn.last penult_number = inn.fetch(10) first_sum = control_sum_calc(inn, @@twelve_digits_first_map) second_sum = control_sum_calc(inn, @@twelve_digits_second_map) penult_number == sum_div(first_sum) && last_number == sum_div(second_sum) end