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 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.