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