class ReferenceValidator::ValidateEan

Constants

DEFAULT_CODE_LENGTH
MAX_CODE_LENGTH

Attributes

code[R]

Public Class Methods

new(code) click to toggle source
# File lib/reference_validator/validate_ean.rb, line 13
def initialize(code)
  @code = code
end

Public Instance Methods

validate!() click to toggle source
# File lib/reference_validator/validate_ean.rb, line 17
def validate!
  return true if code.present? && format_valid? && checksum_valid?

  false
end

Private Instance Methods

checksum_valid?() click to toggle source
# File lib/reference_validator/validate_ean.rb, line 31
def checksum_valid?
  digits    = Array.new(DEFAULT_CODE_LENGTH - code.length, 0) + code.split('').map(&:to_i)
  remainder = data_digits_sum(digits[0..-2]) % 10

  digits[-1] == (remainder.zero? ? remainder : 10 - remainder)
end
data_digits_sum(data_digits) click to toggle source
# File lib/reference_validator/validate_ean.rb, line 38
def data_digits_sum(data_digits)
  data_digits.each_with_index.reduce(0) do |sum, (digit, index)|
    sum + ((index % 2).zero? ? digit * 3 : digit)
  end
end
format_valid?() click to toggle source
# File lib/reference_validator/validate_ean.rb, line 25
def format_valid?
  return false unless code.length == MAX_CODE_LENGTH

  code.match?(/\A\d{1,#{DEFAULT_CODE_LENGTH}}\z/)
end