Class: GS1::CheckDigitCalculator
- Inherits:
-
Object
- Object
- GS1::CheckDigitCalculator
- Defined in:
- lib/gs1/check_digit_calculator.rb
Overview
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.
Constant Summary collapse
- MULTIPLIER_ARRAY =
[3, 1] * 9
- VALID_LENGTHS =
[7, 11, 12, 13, 17].freeze
Class Method Summary collapse
Instance Method Summary collapse
- #calculate_sequence_with_digit ⇒ Object
- #check_digit ⇒ Object
-
#initialize(sequence) ⇒ CheckDigitCalculator
constructor
A new instance of CheckDigitCalculator.
Constructor Details
#initialize(sequence) ⇒ CheckDigitCalculator
Returns a new instance of CheckDigitCalculator.
12 13 14 15 16 17 |
# 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 |
Class Method Details
.from_sequence(sequence) ⇒ Object
19 20 21 |
# File 'lib/gs1/check_digit_calculator.rb', line 19 def self.from_sequence(sequence) new(sequence).check_digit end |
.with_sequence(sequence) ⇒ Object
23 24 25 |
# File 'lib/gs1/check_digit_calculator.rb', line 23 def self.with_sequence(sequence) new(sequence).calculate_sequence_with_digit end |
Instance Method Details
#calculate_sequence_with_digit ⇒ Object
31 32 33 |
# File 'lib/gs1/check_digit_calculator.rb', line 31 def calculate_sequence_with_digit sequence + check_digit end |
#check_digit ⇒ Object
27 28 29 |
# File 'lib/gs1/check_digit_calculator.rb', line 27 def check_digit sub_from_nearest_higher_ten.to_s end |