The Code For Recognizing Delivery Company By Tracking Number

In this post I'm going to offer you a solution that recognizes a delivery company by tracking number.

All companies use their own tracking number format, so I have created special regular expressions for all of them. I read about formats in the official documentation of delivery companies. This solution works for the following services:

  • UPS
  • USPS
  • FedEX

Formats of tracking numbers

FedEX

The most common tracking number format is 12 digits or 15 digits.Some other less common formats may also exist, such as 20 digits and 22 digits.

FedEX tracking number examples

9999 9999 99999999 9999 9999 9999999 9999 9999 9999 99999999 9999 9999 9999 9999 99
UPS

The most common tracking number format is a combination of 18 alphabetic and numeric characters, usually starting with "1Z". Some other less common formats may also exist.

UPS tracking number examples

1Z 9999 9999 9999 99999999 9999 9999T 9999 9999 999999 99999
USPS

The most common tracking number format is 20 digits or a combination of 13 alphabetic and numeric characters, usually starting with 2 alphabets, following by 9 digits, and ending with "US". Some other less common formats may also exist, such as 10 digits.

USPS tracking number examples

USPS Tracking® 9400 1000 0000 0000 0000 00Priority Mail® 9205 5000 0000 0000 0000 00Certified Mail® 9407 3000 0000 0000 0000 00Collect On Delivery Hold For Pickup 9303 3000 0000 0000 0000 00Global Express Guaranteed® 82 000 000 00Priority Mail Express International® EC 000 000 000 USPriority Mail Express® 9270 1000 0000 0000 0000 00EA 000 000 000 USPriority Mail International® CP 000 000 000 USRegistered Mail™ 9208 8000 0000 0000 0000 00Signature Confirmation™ 9202 1000 0000 0000 0000 00

Code for tracking number recognition (regex)

FedEx
^[0-9]{20}$^[0-9]{15}$^[0-9]{12}$^[0-9]{22}$
UPS
^(1Z)[0-9A-Z]{16}$^(T)+[0-9A-Z]{10}$^[0-9]{9}$^[0-9]{26}$
USPS
^(94|93|92|94|95)[0-9]{20}$ ^(94|93|92|94|95)[0-9]{22}$ ^(70|14|23|03)[0-9]{14}$ ^(M0|82)[0-9]{8}$ ^([A-Z]{2})[0-9]{9}([A-Z]{2})$

Python script for delivery company recognition

import re def recognize_delivery_service(tracking): service = None usps_pattern = [ '^(94|93|92|94|95)[0-9]{20}$', '^(94|93|92|94|95)[0-9]{22}$', '^(70|14|23|03)[0-9]{14}$', '^(M0|82)[0-9]{8}$', '^([A-Z]{2})[0-9]{9}([A-Z]{2})$' ] ups_pattern = [ '^(1Z)[0-9A-Z]{16}$', '^(T)+[0-9A-Z]{10}$', '^[0-9]{9}$', '^[0-9]{26}$' ] fedex_pattern = [ '^[0-9]{20}$', '^[0-9]{15}$', '^[0-9]{12}$', '^[0-9]{22}$' ] usps = "(" + ")|(".join(usps_pattern) + ")" fedex = "(" + ")|(".join(fedex_pattern) + ")" ups= "(" + ")|(".join(ups_pattern) + ")" if re.match(usps, tracking) != None: service = 'USPS' elif re.match(ups, tracking) != None: service = 'UPS' elif re.match(fedex, tracking) != None: service = 'FedEx' return service

PHP class for delivery company recognition

class Tracking { public function getPostServiceName($track) { $service = ''; if($this->isUSPSTrack($track)) { $service = 'USPS'; } elseif ($this->isUPSTrack($track)) { $service = 'UPS'; } elseif ($this->isFedExTrack($track)) { $service = 'FedEx'; } return $service; } private function isUSPSTrack($track) { $usps = array(); $usps[0] = '^(94|93|92|94|95)[0-9]{20}$'; $usps[1] = '^(94|93|92|94|95)[0-9]{22}$'; $usps[2] = '^(70|14|23|03)[0-9]{14}$'; $usps[3] = '^(M0|82)[0-9]{8}$'; $usps[4] = '^([A-Z]{2})[0-9]{9}([A-Z]{2})$'; if (preg_match('/('.$usps[0].')|('.$usps[1].')|('.$usps[2].')|('.$usps[3].')|('.$usps[4].')/', $track)) { return true; } return false; } private function isUPSTrack($track) { $ups = array(); $ups[0] = '^(1Z)[0-9A-Z]{16}$'; $ups[1] = '^(T)+[0-9A-Z]{10}$'; $ups[2] = '^[0-9]{9}$'; $ups[3] = '^[0-9]{26}$'; if (preg_match('/('.$ups[0].')|('.$ups[1].')|('.$ups[2].')|('.$ups[3].')/', $track)) { return true; } return false; } private function isFedExTrack($track) { $fedex = array(); $fedex[0] = '^[0-9]{20}$'; $fedex[1] = '^[0-9]{15}$'; $fedex[2] = '^[0-9]{12}$'; $fedex[3] = '^[0-9]{22}$'; if (preg_match('/('.$fedex[0].')|('.$fedex[1].')|('.$fedex[2].')|('.$fedex[3].')/', $track)) { return true; } return false; } }

To summarize

You can find this code on my GitHub repository related to this topic.

If the format has changed or you have found inaccuracies in this information - please leave a comment below.

I hope this post was helpful and saved time for you.

Tag » How Many Numbers In Usps Tracking