class BrDocuments::Gtin

Public Class Methods

new(code) click to toggle source
# File lib/br_documents/gtin.rb, line 3
def initialize(code)
  @code = code
end

Public Instance Methods

valid?() click to toggle source
# File lib/br_documents/gtin.rb, line 7
def valid?
  valid_length? && valid_checksum?
end

Private Instance Methods

valid_checksum?() click to toggle source
# File lib/br_documents/gtin.rb, line 17
def valid_checksum?
  numbers = @code[0, @code.length - 1].chars.reverse
  odd = even = 0

  numbers.each_with_index do |number, i|
    (i + 1).even? ? (even += number.to_i) : (odd += number.to_i * 3)
  end

  @code[-1].to_i == ((10 - (odd + even)) % 10)
end
valid_length?() click to toggle source
# File lib/br_documents/gtin.rb, line 13
def valid_length?
  [8, 12, 13, 14].include?(@code.length)
end