Module: MRZ::CheckDigit

Defined in:
lib/mrz/check_digit.rb

Constant Summary collapse

FACTORS =
[7, 3, 1]

Class Method Summary collapse

Class Method Details

.calculate(sequence) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/mrz/check_digit.rb', line 5

def self.calculate(sequence)
  check_digit = sequence.split("").each_with_index.reduce(0) do |acc,(char, i)|
    asciiCode = char.ord

    normalized_code =
      case asciiCode
      when proc { |n| n == 60 }
        0
      when proc { |n| n >= 65 }
        asciiCode - 55
      when proc { |n| n >= 48 }
        asciiCode - 48
      else
        asciiCode
      end

    acc + normalized_code * FACTORS[i % 3]
  end

  check_digit % 10
end