Class: TrackingNumber::FedExGround18

Inherits:
FedEx
  • Object
show all
Defined in:
lib/tracking_number/fedex.rb

Constant Summary collapse

SEARCH_PATTERN =
/(\b([0-9]\s*){18,18}\b)/
VERIFY_PATTERN =
/^[0-9]{2,2}([0-9]{15,15})([0-9])$/
LENGTH =
20

Instance Attribute Summary

Attributes inherited from Base

#original_number, #tracking_number

Instance Method Summary collapse

Methods inherited from FedEx

#carrier

Methods inherited from Base

#initialize, #inspect, scan, search, #to_s, #valid?, #valid_format?

Constructor Details

This class inherits a constructor from TrackingNumber::Base

Instance Method Details

#decodeObject



104
105
106
107
108
109
110
111
112
# File 'lib/tracking_number/fedex.rb', line 104

def decode
  {:application_id => self.tracking_number.to_s.slice(0...2),
   :serial_container =>  self.tracking_number.to_s.slice(1...2),
   :service_code => self.tracking_number.to_s.slice(2...3),
   :shipper_id =>  self.tracking_number.to_s.slice(3...10),
   :package_identifier =>  self.tracking_number.to_s.slice(10...17),
   :check_digit => self.tracking_number.slice(17...18)
  }
end

#matchesObject



100
101
102
# File 'lib/tracking_number/fedex.rb', line 100

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

#valid_checksum?Boolean

Returns:

  • (Boolean)


114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/tracking_number/fedex.rb', line 114

def valid_checksum?
  # [0-9]{2,2} - Not used
  # [0-9]{15, 15} - used for calculation

  sequence = tracking_number.chars.to_a.map(&:to_i)
  check_digit = sequence.pop
  total = 0
  sequence.reverse.each_with_index do |x, i|
    x *= 3 if i.even?
    total += x
  end
  check = total % 10
  check = (10 - check) unless (check.zero?)
  return true if check == check_digit.to_i
end