tags:

views:

1954

answers:

8

Does anybody know good place or patterns for checking which company tracking number is the given tracking number for a package. Idea is After scanning a barcode for a package check tracking number with patterns and show which company it was shipped by.

+10  A: 

This has some regexes for fedex/ups/usps tracking numbers: http://gummydev.com/regex/

Chris Hynes
FYI, the FedEx tracking number regex listed there completely doesn't work for me - all the FedEx numbers we have in our system start with 4...
Rufo Sanchez
it is important to remember that fed ex is really a few different shippers (each with their own carrier codes) all lumped together. there is fed ex ground, fed ex express, fed ex freight, etc...
E Rolnicki
+1  A: 

You can try these (not guaranteed):

UPS:

\b(1Z ?[0-9A-Z]{3} ?[0-9A-Z]{3} ?[0-9A-Z]{2} ?[0-9A-Z]{4} ?[0-9A-Z]{3} ?[0-9A-Z]|[\dT]\d\d\d ?\d\d\d\d ?\d\d\d)\b

UPS:

\b(1Z ?\d\d\d ?\d\w\w ?\d\d ?\d\d\d\d ?\d\d\d ?\d|[\dT]\d\d\d ?\d\d\d\d ?\d\d\d)\b

USPost:

\b(\d\d\d\d ?\d\d\d\d ?\d\d\d\d ?\d\d\d\d ?\d\d\d\d ?\d\d|\d\d\d\d ?\d\d\d\d ?\d\d\d\d ?\d\d\d\d ?\d\d\d\d)\b

But please test before you use them. I recommend RegexBuddy.

David Pokluda
+1  A: 

I use these in an eBay application I wrote:

USPS Domestic:

/^91[0-9]+$/

USPS International:

/^[A-Za-z]{2}[0-9]+US$/

FedEx:

/^[0-9]{15}$/

However, this might be eBay/Paypal specific, as all USPS Domestic labels start with "91". All USPS International labels start with two characters and end with "US". As far as I know, FedEx just uses 15 random digits.

(Please note that these regular expressions assume all spaces are removed. It would be fairly easy to allow for spaces though)

Jefe
+1  A: 

I believe FedEx is 12 digits:

^[0-9]{12}$
Mike W
A: 

I also came across tracking numbers from FedEx with 22 digits recently, so watch out! I haven't found any good reference for the FedEx's general format yet.

FedEx Example #: 9612019059803563050071

Soleone
+1  A: 

I need to verify JUST United States Postal Service (USPS) tracking numbers. WikiAnswers says that my number formats are as follows:

USPS only offers tracking with Express mail, with usually begins with an "E", another letter, followed by 9 digits, and two more letters. USPS does have "Label numbers" for other services that are between 16 and 22 digits long.

http://wiki.answers.com/Q/How_many_numbers_in_a_USPS_tracking_number

I'm adding in that the Label numbers start with a "9" as all the ones I have from personal shipments for the past 2 years start with a 9.

So, assuming that WikiAnswers is correct, here is my regex that matches both:

/^E\D{1}\d{9}\D{2}$|^9\d{15,21}$/

It's pretty simple. Here is the break down:

^E       - Begins w/ E  (For express number)
\D{1}    - followed by another letter
\d{9}    - followed by 9 numbers
\D{2}    - followed by 2 more letters
$        - End of string

|        - OR

^9       - Basic Track & Ship Number
\d{15,21}   - followed by 15 to 21 numbers
$        - End of string

Using www.gummydev.com's regex tester this patter matches both of my test strings:

EXPRESS MAIL : EK225651436US

LABEL NUMBER: 9410803699300003725216

**Note: If you're using ColdFusion (I am), remove the first and last "/" from the pattern

molaro
+1  A: 

In the event it helps anyone else searching for this, here is a simple Python class that resolves common formats: Gist #541851

Erik Karulf
+1  A: 

I pressed Royal Mail for a regex for the Recorded Delivery & Special Delivery tracking references but didn't get very far. Even a full set of rules so I could roll my own was beyond them.

Basically, even after they had taken about a week and came back with various combinations of letters denoting service type, I was able to provide examples from our experience that showed there were additional combinations that were obviously valid but that they had not documented.

The references follow the apparently standard international format that I think Jefe's /^[A-Za-z]{2}[0-9]+GB$/ regex would describe:

XX123456789GB

Even though this seems to be a standard format, i.e. most international mail has the same format where the last two letters denote the country of origin, I've not been able to find out any more about this 'standard' or where it originates from (any clarification welcome!).

Particular to Royal Mail seems to be the use of the first two letters to denote service level. I have managed to compile a list of prefixes that denote Special Delivery, but am not convinced that it is 100% complete:

AD AE AF AJ AK AR AZ BP CX DS EP HC HP KC KG
KH KI KJ KQ KU KV KW KY KZ PW SA SC SG SH SI
SJ SL SP SQ SU SW SY SZ TX WA WH XQ WZ

Without one of these prefixes the service is Recorded Delivery which gives delivery confirmation but no tracking.

It seems generally that inclusion of an S, X or Z denotes a higher service level and I don't think I've ever seen a normal Recorded Delivery item with any of those letters in the prefix.

However, as you can see there are many prefixes that would need to be tested if service level were to be checked using regex, and given the fact that Royal Mail seem incapable of providing a comprehensive rule set then trying to test for service level may be futile.

Lunatik