Sha256: 5b47de8be0d8d33aa46a7ba06e40e0de20b85730e7bef80ee3d57c2bbc715166

Contents?: true

Size: 742 Bytes

Versions: 13

Compression:

Stored size: 742 Bytes

Contents

module TrackingNumber
  class OnTrac < Base
    SEARCH_PATTERN = /(\b(C\s*)([0-9]\s*){14,14}\b)/
    VERIFY_PATTERN = /^(C[0-9]{13,13})([0-9])$/
    def carrier
      :ontrac
    end

    def matches
      self.tracking_number.scan(VERIFY_PATTERN).flatten
    end

    def valid_checksum?
      # checksum calculation is the same as UPS
      sequence, check_digit = matches

      total = 0
      sequence.chars.each_with_index do |c, i|
        x = if c[/[0-9]/] # numeric
          c.to_i
        else
          (c[0].ord - 3) % 10
        end
        x *= 2 if i.odd?
        total += x
      end

      check = (total % 10)
      check = (10 - check) unless (check.zero?)

      return (check.to_i == check_digit.to_i)
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
tracking_number-0.10.5 lib/tracking_number/ontrac.rb
tracking_number-0.10.4 lib/tracking_number/ontrac.rb
tracking_number-0.10.3 lib/tracking_number/ontrac.rb
tracking_number-0.10.1 lib/tracking_number/ontrac.rb
tracking_number-0.10.0 lib/tracking_number/ontrac.rb
tracking_number-0.9.1 lib/tracking_number/ontrac.rb
tracking_number-0.9.0 lib/tracking_number/ontrac.rb
tracking_number-0.8.6 lib/tracking_number/ontrac.rb
tracking_number-0.8.5 lib/tracking_number/ontrac.rb
tracking_number-0.8.0 lib/tracking_number/ontrac.rb
tracking_number-0.7.0 lib/tracking_number/ontrac.rb
tracking_number-0.6.0 lib/tracking_number/ontrac.rb
tracking_number-0.5.0 lib/tracking_number/ontrac.rb