{
    "name": "UPS",
    "courier_code": "ups",
    "tracking_numbers": [
        {
            "name": "UPS",
            "id": "ups",
            "regex": [
                "\\s*1\\s*Z\\s*(?<SerialNumber>",
                "(?<ShipperId>(?:[A-Z0-9]\\s*){6,6})",
                "(?<ServiceType>(?:[A-Z0-9]\\s*){2,2})",
                "(?<PackageId>(?:[A-Z0-9]\\s*){7,7}))",
                "(?<CheckDigit>[0-9]\\s*)"
            ],
            "validation": {
                "checksum": {
                    "name": "mod10",
                    "evens_multiplier": 1,
                    "odds_multiplier": 2
                }
            },
            "tracking_url": "https://wwwapps.ups.com/WebTracking/track?track=yes&trackNums=%s",
            "additional": [
                {
                    "name": "Service Type",
                    "regex_group_name": "ServiceType",
                    "lookup": [
                        {
                            "matches": "01",
                            "name": "UPS United States Next Day Air (Red)"
                        },
                        {
                            "matches": "02",
                            "name": "UPS United States Second Day Air (Blue)"
                        },
                        {
                            "matches": "03",
                            "name": "UPS United States Ground"
                        },
                        {
                            "matches": "12",
                            "name": "UPS United States Third Day Select"
                        },
                        {
                            "matches": "13",
                            "name": "UPS United States Next Day Air Saver (Red Saver)"
                        },
                        {
                            "matches": "15",
                            "name": "UPS United States Next Day Air Early A.M."
                        },
                        {
                            "matches": "22",
                            "name": "UPS United States Ground - Returns Plus - Three Pickup Attempts"
                        },
                        {
                            "matches": "32",
                            "name": "UPS United States Next Day Air Early A.M. - COD"
                        },
                        {
                            "matches": "33",
                            "name": "UPS United States Next Day Air Early A.M. - Saturday Delivery, COD"
                        },
                        {
                            "matches": "41",
                            "name": "UPS United States Next Day Air Early A.M. - Saturday Delivery"
                        },
                        {
                            "matches": "42",
                            "name": "UPS United States Ground - Signature Required"
                        },
                        {
                            "matches": "44",
                            "name": "UPS United States Next Day Air - Saturday Delivery"
                        },
                        {
                            "matches": "66",
                            "name": "UPS United States Worldwide Express"
                        },
                        {
                            "matches": "72",
                            "name": "UPS United States Ground - Collect on Delivery"
                        },
                        {
                            "matches": "78",
                            "name": "UPS United States Ground - Returns Plus - One Pickup Attempt"
                        },
                        {
                            "matches": "90",
                            "name": "UPS United States Ground - Returns - UPS Prints and Mails Label"
                        },
                        {
                            "matches": "A0",
                            "name": "UPS United States Next Day Air Early A.M. - Adult Signature Required"
                        },
                        {
                            "matches": "A1",
                            "name": "UPS United States Next Day Air Early A.M. - Saturday Delivery, Adult Signature Required"
                        },
                        {
                            "matches": "A2",
                            "name": "UPS United States Next Day Air - Adult Signature Required"
                        },
                        {
                            "matches": "A8",
                            "name": "UPS United States Ground - Adult Signature Required"
                        },
                        {
                            "matches": "A9",
                            "name": "UPS United States Next Day Air Early A.M. - Adult Signature Required, COD"
                        },
                        {
                            "matches": "AA",
                            "name": "UPS United States Next Day Air Early A.M. - Saturday Delivery, Adult Signature Required, COD"
                        },
                        {
                            "matches": "YW",
                            "name": "UPS SurePost - Delivered by the USPS"
                        }
                    ]
                }
            ],
            "test_numbers": {
                "valid": [
                    "1Z5R89390357567127",
                    "1Z879E930346834440",
                    "1Z410E7W0392751591",
                    "1Z8V92A70367203024",
                    " 1 Z 8 V 9 2 A 7 0 3 6 7 2 0 3 0 2 4 ",
                    "1ZXX3150YW44070023"
                ],
                "invalid": [
                    "2Z5R89390357567127",
                    "1A5R89390357567127",
                    "1Z1111111111111111"
                ]
            }
        },
        {
            "name": "UPS Waybill",
            "regex": [
                "\\s*(?<ServiceType>([AHJKTV]\\s*){1})",
                "(?<SerialNumber>(?:[0-9]\\s*){9})",
                "(?<CheckDigit>[0-9]\\s*){1}"
            ],
            "validation": {
                "checksum": {
                    "name": "mod10",
                    "evens_multiplier": 1,
                    "odds_multiplier": 2
                }
            },
            "additional": [
                {
                    "name": "Service Type",
                    "regex_group_name": "ServiceType",
                    "lookup": [
                        {
                            "matches": "J",
                            "name": "UPS Next Day Express"
                        },
                        {
                            "matches": "K",
                            "name": "UPS Ground"
                        },
                        {
                            "matches": "V",
                            "name": "UPS WorldWide Express Saver"
                        }
                    ]
                }
            ],
            "tracking_url": "https://wwwapps.ups.com/WebTracking/track?track=yes&trackNums=%s",
            "test_numbers": {
                "valid": [
                    "K1506235620",
                    "K 150 623 562 0",
                    "K2479825491",
                    "J4603636537",
                    "V0490119172",
                    "V0431105627"
                ],
                "invalid": [
                    "K1506235622",
                    "K2479825492",
                    "J4603636538",
                    "V0411335627",
                    "V0423305841"
                ]
            }
        }
    ]
}
