Sha256: 0a6e480b181ecb4ae9be8221249be75f2972af3e546cd72c23cb87ceb64c964f

Contents?: true

Size: 538 Bytes

Versions: 5

Compression:

Stored size: 538 Bytes

Contents

module BrDocuments
  class Gtin
    def initialize(code)
      @code = code
    end

    def valid?
      valid_length? && valid_checksum?
    end

    private

    def valid_length?
      [8, 12, 13, 14].include?(@code.length)
    end

    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
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
br_documents-0.2.5 lib/br_documents/gtin.rb
br_documents-0.2.4 lib/br_documents/gtin.rb
br_documents-0.2.3 lib/br_documents/gtin.rb
br_documents-0.2.2 lib/br_documents/gtin.rb
br_documents-0.2.1 lib/br_documents/gtin.rb