The Freight Identifier Validator takes any text — a booking line, an email, a messy reference field — and finds and validates every freight identifier inside it, recomputing each one’s check digit. You can also validate a single identifier by type. It covers three schemes used across container, air and sea freight: the ISO 6346 shipping-container number, the IATA air waybill (AWB) number, and the IMO ship identification number. Each check-digit algorithm is implemented from the public scheme — no standard text is reproduced, and no external lookup is made.
This is structural validation: a valid check digit confirms the identifier is correctly constructed, not that the container, shipment or vessel actually exists or is active. Hand the endpoint a whole line of text and let it extract the identifiers, or pass a single value with its type.
Parse a string (the main use case)
Pass text= with any string — a booking line, an email, a messy reference field — and the validator finds the container, AWB and IMO identifiers in it and validates each. Identifiers are returned in the order they appear.
Air waybills need care in free text, because an AWB is only 11 digits and UK telephone numbers are 11 digits too (London writes them 020 7946 0000, the same 3-4-4 shape as 176 1234 5675). So text mode reads an AWB in any of the ways people write one — 176-12345675, 17612345675, 176 12345675, 176 1234 5675, 176-1234 5675, 176-1234-5675, 176 1234567 5, 176-1234567-5 — and when an AWB, MAWB, HAWB or air waybill label stands next to the number it checks every spelling exactly as typed mode does, so a mistyped one says INVALID_CHECK_DIGIT. Without a label, 176-12345675 is always read, and a check digit written apart (176 1234567 5) whenever the prefix is an airline’s other than 020 or 077; the shapes telephones share are read only when the check digit is right and the prefix is an airline’s, and not where a word such as “call” or “tel”, or a spaced number under 020 or 077 (how London and UK mobile numbers begin), says it is a telephone number — the API docs give the rule for each spelling. When you need one number checked whatever its shape, use typed mode.
GET /api/validate?text=Box CSQU3054383 on AWB 020-58717481 to vessel IMO9074729
→ found: 3 identifiers (container ✓, awb ✓, imo ✓)Every response carries a _source citing the relevant scheme (ISO 6346 / IATA AWB / IMO) and is computed deterministically by freightutils.com. A string with no recognisable identifier returns an empty found list with a note. To validate a single identifier instead, pass value= with its type= — the per-scheme rules and worked examples below apply.
Shipping container — ISO 6346
A container number is 4 letters (a 3-letter owner code + a 1-letter equipment category — U freight container, J detachable equipment, Z trailer/chassis) followed by a 6-digit serial and a check digit. Each letter is valued 10, 11, 12, … skipping every multiple of 11; each digit keeps its value; each is multiplied by 2position (1, 2, 4, …, 512), summed, then taken modulo 11 (a remainder of 10 becomes 0).
GET /api/validate?value=CSQU3054383&type=container → valid: true (check digit 3)
GET /api/validate?value=CSQU3054384&type=container → valid: false (expected 3, got 4)Air waybill — IATA modulus 7
An AWB is 11 digits: a 3-digit airline prefix plus an 8-digit serial. The final serial digit is the check digit, equal to the first 7 serial digits (as a number) modulo 7. The validator also names the operating airline from the prefix when exactly one record holds it, and lists the candidate carriers when the prefix is shared (Lufthansa and Lufthansa Cargo both issue 020- waybills), reusing the existing airline dataset. Because the modulus is 7, a valid AWB never ends in 7, 8 or 9.
GET /api/validate?value=176-12345675&type=awb → valid: true (Emirates, check digit 5)
GET /api/validate?value=020-58717481&type=awb → valid: true (shared prefix: airline null, airline_candidates Lufthansa + Lufthansa Cargo)
GET /api/validate?value=020-58717483&type=awb → valid: false (expected 1, got 3)IMO ship number — modulus 10
An IMO number is the letters “IMO” plus 7 digits. The first six digits are multiplied by 7, 6, 5, 4, 3 and 2 respectively; the sum, modulo 10, is the seventh (check) digit.
GET /api/validate?value=IMO9074729&type=imo → valid: true (check digit 9)
GET /api/validate?value=IMO9074720&type=imo → valid: false (expected 9, got 0)Frequently asked questions
What does “valid” actually mean here?
Why can’t an AWB end in 7, 8 or 9?
Does it resolve the container’s owner company?
Structural validation only — a valid check digit means the identifier is well-formed, not that the container, shipment or vessel exists or is active. Not a registry lookup, and not legal or compliance advice.