class GS1::CheckDigitCalculator
GS1
check digit calculation
Implementation of: www.gs1.org/how-calculate-check-digit-manually Notice! This class does not validate the format of the given sequence, only the length.
Constants
- MULTIPLIER_ARRAY
- VALID_LENGTHS
Attributes
reverse_sequence[R]
sequence[R]
Public Class Methods
from_sequence(sequence)
click to toggle source
# File lib/gs1/check_digit_calculator.rb, line 19 def self.from_sequence(sequence) new(sequence).check_digit end
new(sequence)
click to toggle source
# File lib/gs1/check_digit_calculator.rb, line 12 def initialize(sequence) @sequence = sequence @reverse_sequence = sequence.chars.reverse raise ArgumentError, 'Invalid length' unless VALID_LENGTHS.include?(sequence.size) end
with_sequence(sequence)
click to toggle source
# File lib/gs1/check_digit_calculator.rb, line 23 def self.with_sequence(sequence) new(sequence).calculate_sequence_with_digit end
Public Instance Methods
calculate_sequence_with_digit()
click to toggle source
# File lib/gs1/check_digit_calculator.rb, line 31 def calculate_sequence_with_digit sequence + check_digit end
check_digit()
click to toggle source
# File lib/gs1/check_digit_calculator.rb, line 27 def check_digit sub_from_nearest_higher_ten.to_s end
Private Instance Methods
multiplied_sequence()
click to toggle source
# File lib/gs1/check_digit_calculator.rb, line 39 def multiplied_sequence @multiplied_sequence ||= reverse_sequence.each_with_index.map do |digit, idx| digit.to_i * MULTIPLIER_ARRAY[idx] end end
sub_from_nearest_higher_ten()
click to toggle source
# File lib/gs1/check_digit_calculator.rb, line 45 def sub_from_nearest_higher_ten (10 - (multiplied_sequence.inject(:+) % 10)) % 10 end