Sha256: 1357e4e9195ed3991c840d85c5c040aca86f12f23eed1fe6ed98b12195fa7f34

Contents?: true

Size: 442 Bytes

Versions: 1

Compression:

Stored size: 442 Bytes

Contents

require 'russianpost/barcode/base'

module RussianPost
  module Barcode
    class International < Base
      WEIGHT_FACTORS = [8, 6, 4, 2, 3, 5, 9, 7, 0]

      def self.format
        /\A([A-Z]{2}\d{9}[A-Z]{2})\Z/
      end

      private

      def checkdigit
        checksum < 11 ? checksum % 10 : 5
      end

      def checksum
        11 - (digits.zip(WEIGHT_FACTORS).map{|i| i.reduce(:*)}.reduce(:+) % 11)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
russianpost-0.6.0 lib/russianpost/barcode/international.rb