Module: NumberPlate::SG::Checksum

Included in:
Generator, Validator
Defined in:
lib/number_plate/sg/checksum.rb

Constant Summary collapse

CHECK_SUM =
{ 0 => "A", 1 => "Z", 2 => "Y", 3 => "X", 4 => "U", 5 => "T", 6 => "S", 7 => "R", 8 => "P", 9 => "M", 10 => "L", 11 => "K", 12 => "J", 13 => "H", 14 => "G", 15 => "E", 16 => "D", 17 => "C", 18 => "B" }
MULTIPLIER =
[9, 4, 5, 4, 3, 2]

Instance Method Summary collapse

Instance Method Details

#checksumObject



7
8
9
# File 'lib/number_plate/sg/checksum.rb', line 7

def checksum
  get_checksum_from_numbers(numbers)
end

#get_checksum_from_numbers(numbers) ⇒ Object



27
28
29
30
31
32
# File 'lib/number_plate/sg/checksum.rb', line 27

def get_checksum_from_numbers(numbers)
  checksum_array = []
  numbers.zip(MULTIPLIER) { |x, y| checksum_array << (x * y) }
  checksum_key = checksum_array.reduce(:+) % 19
  CHECK_SUM[checksum_key]
end

#numbersObject



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/number_plate/sg/checksum.rb', line 11

def numbers
  numbers = []
  @letters.split(//).each do |alphebat|
    numbers << (alphebat.ord - 64)
  end

  if numbers.length == 3
    numbers = numbers[1,2]
  elsif numbers.length == 1
    numbers = [1] + numbers
  end

  numerals = ("000" + @numerals)[-4,4]
  numbers + numerals.split(//).map(&:to_i)
end