Module: SpanishCccValidator::CustomCccValidator

Defined in:
lib/spanish_ccc_validator/custom_ccc_validator.rb

Class Method Summary collapse

Class Method Details

.calculate_digit(ary) ⇒ Object

Main algorithm



10
11
12
13
14
15
16
17
18
# File 'lib/spanish_ccc_validator/custom_ccc_validator.rb', line 10

def self.calculate_digit(ary)
  key   = [1,2,4,8,5,10,9,7,3,6]
  sumatory = 0
  key.each_with_index { |number, index| sumatory += number * ary[index]  }
  result = 11 - (sumatory % 11)
  result = 1 if result == 10
  result = 0 if result == 11
  result
end

.canonize(str) ⇒ Object

Gets a string and extracts the number from it Example: canonize(“1234-5678-90-3344556677”) returns “12345678903344556677”



5
6
7
# File 'lib/spanish_ccc_validator/custom_ccc_validator.rb', line 5

def self.canonize(str)
  str.gsub(/\D/,'')
end

.validate(str) ⇒ Object

Validates size and checks control-digits corelation



21
22
23
24
25
# File 'lib/spanish_ccc_validator/custom_ccc_validator.rb', line 21

def self.validate(str)
  ary = canonize(str).split('').map(&:to_i)
  return false unless ary.size == 20
  (calculate_digit([0,0] + ary[0..7]) == ary[8]) && (calculate_digit(ary[10..19]) == ary[9])
end