ISO 6346
The international standard for identifying and marking freight containers. ISO 6346 sets the 11-character number format, the check-digit algorithm, the size & type codes, and the legal markings every container carries on its sides and doors. Current revision: ISO 6346:2022.
ISO 6346 is the international standard for identifying and marking freight containers; the current revision is ISO 6346:2022. It defines the 11-character container number (a three-letter owner code, a one-letter category, a six-digit serial and a check digit), the four-character size and type code such as 45G1, and the markings painted on doors and sides. How the container is physically built is covered by a separate standard, ISO 1496.
What ISO 6346 actually covers
There are two ISO standards every freight container operator runs into. They get confused constantly. They cover different things:
- ISO 1496 — physical specification. Dimensions, racking strength, stacking loads, test methods. This is what container manufacturers build to.
- ISO 6346 — identification and marking. The 11-character ID, the check digit, the size & type code, the operational and safety stencils. This is what’s painted on the doors and side panels.
Both apply to every standard ISO container. If you’re inspecting equipment, ISO 1496 is the one that tells you whether the box is structurally sound; ISO 6346 is the one that tells you what to write down. This guide is about the second.
Anatomy of a container number
Every ISO container carries an 11-character identifier, painted in block stencil on both door panels and on at least one side. Here’s a real OWLU® container broken apart:
The first three letters are the owner’s BIC-registered identifier — see the
BIC Codes guide. The fourth letter is the equipment
category: U for freight containers (which is almost everything),
J for detachable equipment, Z for trailers and chassis. The six-digit
serial is whatever the owner has assigned, sequential per fleet. The final digit is computed.
The check digit
ISO 6346 specifies a modulo-11 algorithm that produces a single check digit from the first 10 characters. The point isn’t security — it’s catching transcription errors when someone reads a container number off a worn door panel or types it into a manifest. The math is straightforward but the letter values are not.
The algorithm
- Convert each of the first 10 characters to its numeric value. Digits are themselves; letters use a special table (next section).
-
Multiply each value by
2 to the power of its position— that’s weights 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 from left to right. - Sum the ten products.
- Take the sum modulo 11. The result is the check digit.
-
Edge case: if the remainder is 10, it’s printed as
0. ISO 6346 recommends not allocating those serials, since single-character errors can mutate one valid number into another without detection.
Letter values — the table that bites people
Letters start at A = 10 and skip every multiple of 11 (so 11, 22, 33 are unused).
The skips fall before L and before V. This is the part
most amateur implementations get wrong:
| A | B | C | D | E | F | G | H | I | J |
|---|---|---|---|---|---|---|---|---|---|
| 10 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| K | L | M | N | O | P | Q | R | S | T |
|---|---|---|---|---|---|---|---|---|---|
| 21 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
| U | V | W | X | Y | Z |
|---|---|---|---|---|---|
| 32 | 34 | 35 | 36 | 37 | 38 |
The skips exist for a real reason. The algorithm divides by 11 at the end, so any two
characters with values congruent mod 11 would contribute identically — meaning a
single-character substitution between them would slip past the check digit. Skipping the
multiples guarantees every letter is unique mod 11. Implementations that compute
letter_value = ord(c) - ord('A') + 10 without skipping silently produce wrong check
digits for any container with L, V, W,
X, Y, or Z in it. This is the classic bug.
Worked example
The same OWLU® container from the anatomy section above —
OWLU209148 — run through the algorithm:
| Pos | Char | Value | × | Weight | = | Product |
|---|---|---|---|---|---|---|
| 0 | O | 26 | × | 1 | = | 26 |
| 1 | W | 35 | × | 2 | = | 70 |
| 2 | L | 23 | × | 4 | = | 92 |
| 3 | U | 32 | × | 8 | = | 256 |
| 4 | 2 | 2 | × | 16 | = | 32 |
| 5 | 0 | 0 | × | 32 | = | 0 |
| 6 | 9 | 9 | × | 64 | = | 576 |
| 7 | 1 | 1 | × | 128 | = | 128 |
| 8 | 4 | 4 | × | 256 | = | 1024 |
| 9 | 8 | 8 | × | 512 | = | 4096 |
| Sum | 6300 | |||||
| 6300 mod 11 | 8 | |||||
Check digit = 8. The full number OWLU2091488 validates — and note
the letter values at work: O, W, and L are 26, 35, and 23, with L landing past the first skipped
multiple of 11. Try it yourself in the
check-digit calculator.
Worn or dirty stencils cause specific predictable swaps: O ↔ 0,
I ↔ 1, S ↔ 5, B ↔
8, Z ↔ 2. ISO 6346 does not ban ambiguous
letters (I, O, and Q are all valid), so the check digit
is what catches the error.
Size & type codes
Below the container number you’ll see another four-character code — usually painted smaller. That’s the size and type code, also defined in ISO 6346. It tells you, in four characters, what kind of container you’re looking at.
Structure:
| Position | What it encodes |
|---|---|
| 1 | Length |
| 2 | Width × Height (combined) |
| 3 | Primary container type |
| 4 | Subtype / detail |
Decode one as you scroll
The standard 40ʹ high cube code, taken apart one position at a time — 45G1:
4 Length code — 40ʹ
5 Width × height — 8ʹ wide × 9ʹ6ʺ — the 5 is what marks a high cube
G Primary type — general purpose, no ventilation
1 Subtype — GP detail variant, by far the most common
= 40ʹ high cube, general purpose
Length codes (position 1)
| 2 | 20ʹ |
| 4 | 40ʹ |
| L | 45ʹ |
| M | 48ʹ |
| N | 49ʹ |
Width × Height codes (position 2)
| 0 | 8ʹ wide × 8ʹ high |
| 2 | 8ʹ × 8ʹ6ʺ (standard) |
| 5 | 8ʹ × 9ʹ6ʺ (high cube) |
| 6 | 8ʹ × >9ʹ6ʺ |
Primary type codes (position 3)
| G | General purpose, no ventilation |
| V | General purpose with ventilation |
| B | Dry bulk |
| S | Named cargo (livestock, autos, fish) |
| R | Reefer (integrated refrigeration) |
| H | Reefer or heated, removable equipment |
| U | Open top |
| T | Tank |
| P | Platform or flat rack |
Common full codes you’ll see at a depot
| Code | What it is |
|---|---|
| 22G1 | 20ʹ standard GP |
| 25G1 | 20ʹ high cube GP |
| 42G1 | 40ʹ standard GP |
| 45G1 | 40ʹ high cube GP |
| L5G1 | 45ʹ high cube GP |
| 22R1 | 20ʹ reefer |
| 42R1 | 40ʹ reefer |
| 45R1 | 40ʹ high cube reefer |
| 22U1 | 20ʹ open top |
| 42U1 | 40ʹ open top |
| 22P1 | 20ʹ flat rack, fixed ends |
| 22P3 | 20ʹ flat rack, collapsible |
| 22T0–T6 | 20ʹ tank, varying pressure ratings |
| 22B0 | 20ʹ dry bulk |
For the full historical lookup, BIC publishes the size & type code reference ↗ reflecting ISO 6346:2022.
The other markings on a container
ISO 6346 also specifies a set of legal and operational stencils that must appear alongside the container number on every box. The most important:
- Max Gross Weight — the maximum allowed combined weight of the container plus contents. Typically around 30,480 kg / 67,200 lbs for a standard 20ʹ or 40ʹ.
- Tare — the empty weight of the container itself. Typically 2,230 kg (4,914 lb) for a 20ʹ GP, 3,750 kg (8,265 lb) for a 40ʹ GP.
- Net / Payload — Max Gross minus Tare. The cargo the container can actually carry.
- Cubic Capacity — interior volume in cubic feet or cubic meters.
- CSC Safety Approval Plate — a separate ISO/CSC requirement (not ISO 6346 itself) but mounted alongside. Indicates the container has passed the structural inspection required by the Convention for Safe Containers and lists the next inspection due date.
- Owner’s logo or brand stencil — Maersk’s "Maersk," Hapag-Lloyd’s "HL," etc. Convention, not requirement.
Why this matters for operators
ISO 6346 is the thread that runs through every system that touches a container:
- Bills of lading use the 11-character ID as the primary key.
- Terminal and depot management systems (Navis, CRM 1Stop, every TOS in the industry) index everything off the same number.
- Equipment interchange receipts (EIR) — the documents that handle handoffs between depots, truckers, and shippers — carry the ID and the size/type code as the only two facts that matter for legal liability.
- Customs filings, CSC records, OCR systems on terminal gates — everything that processes containers at scale assumes ISO 6346 is intact and validates the check digit.
A container without a valid ISO 6346 identifier is, operationally, invisible. It can’t be tracked, can’t be insured, can’t be moved through a major port. The standard is mundane — eleven characters, a modulo-11 algorithm — but it’s the operational backbone of the entire industry.
ISO 6346 FAQ
How do you calculate an ISO 6346 check digit?
Convert the first 10 characters to numbers. Digits keep their value; letters start at A = 10 and skip multiples of 11, so L = 23 and V = 34. Multiply each value by its position weight (1, 2, 4 and so on up to 512), add the products, and take the total modulo 11. A remainder of 10 is printed as 0. For OWLU209148, the total is 6300 and the check digit is 8.
What does 45G1 mean on a container?
45G1 is an ISO 6346 size and type code. The first character is length (4 = 40ʹ). The second is width and height (5 = 8ʹ wide by 9ʹ6″, a high cube). The third is the primary type (G = general purpose, no ventilation), and the fourth is the subtype. 45G1 is a 40ʹ high cube general-purpose container; 22G1 is the 20ʹ standard-height equivalent.
What is the difference between ISO 6346 and ISO 1496?
ISO 1496 is the physical specification: dimensions, racking strength, stacking loads, and the test methods manufacturers build to. ISO 6346 covers identification and marking: the 11-character number, the check digit, the size and type code, and the operational stencils. When inspecting a box, ISO 1496 tells you whether it is structurally sound; ISO 6346 tells you what to record.
Last updated