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 every container, AWB and IMO identifier in it and validates each. Identifiers are returned in the order they appear.
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, reusing the existing airline dataset. Because the modulus is 7, a valid AWB never ends in 7, 8 or 9.
GET /api/validate?value=020-58717481&type=awb → valid: true (Lufthansa, check digit 1)
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.