module BarcodeValidation::Mixin::HasCheckDigit

Wraps last as a CheckDigit

Constants

MODULUS

Public Instance Methods

check_digit() click to toggle source
# File lib/barcodevalidation/mixin/has_check_digit.rb, line 9
def check_digit
  GTIN::CheckDigit.new(last, expected: expected_check_digit)
end

Private Instance Methods

checkable_digits() click to toggle source
# File lib/barcodevalidation/mixin/has_check_digit.rb, line 26
def checkable_digits
  take(length - 1).reverse.map(&:to_i)
end
expected_check_digit() click to toggle source
# File lib/barcodevalidation/mixin/has_check_digit.rb, line 15
def expected_check_digit
  (MODULUS - weighted_checkable_digit_sum) % MODULUS
end
weighted_checkable_digit_sum() click to toggle source
# File lib/barcodevalidation/mixin/has_check_digit.rb, line 19
def weighted_checkable_digit_sum
  checkable_digits
    .zip([3, 1].cycle)
    .map { |digit, factor| digit * factor }
    .reduce(&:+)
end