Standards/deutsche-post-identcode
Deutsche Post Identcode
Overview
Deutsche Post Identcode (German Identcode, "identification code") is a numeric barcode used by Deutsche Post AG and its logistics division DHL to uniquely identify a postal package and enable Track & Trace from acceptance to delivery 2, 3. Like its sibling the Leitcode, it is not a separate symbology but an application of the Interleaved 2 of 5 (ITF) barcode: the bar/space encoding is standard ITF, but the data layout is fixed and the check digit uses a Deutsche-Post-specific algorithm rather than the ordinary ITF checksum 1, 2, 3.
Where the Leitcode encodes where a shipment is going (routing), the Identcode encodes which shipment it is (tracking) — a sender identity plus a unique mail-piece number. The two codes are typically printed together and used jointly during automatic distribution in mail centers 2. An Identcode carries a fixed 12 digits (11 data digits plus one check digit) 1, 2, 3.
History
The Identcode and Leitcode are the two postal applications of Interleaved 2 of 5 adopted by Deutsche Post AG for domestic German freight automation, later carried into the DHL logistics brand 2, 6. The base ITF symbology was created by David Allais (also the designer of Code 39, Code 93, and Code 11) 7. Precise dating of the Identcode's introduction is not established by the sources consulted here; what is documented is its present role as one of "two variations of the Interleaved 2 of 5 (ITF) barcode" Deutsche Post and DHL use — Identcode for fulfilment/identification, Leitcode for routing/destination 6.
Technical specification
Symbology basis. The Identcode is "an implementation of the Interleaved 2 of 5 barcode symbology" 1 / "an application of Code 2 from 5 interleaved" with a modified checksum 3. As in all ITF codes, digits are encoded in pairs — the first digit of a pair in five bars, the second in the five interleaved spaces, two of every five elements wide 7. ITF requires an even digit count, which the 12-digit Identcode satisfies 7.
Digit layout (12 digits). 1, 2, 3
| Positions | Field | German term | Example |
|---|---|---|---|
| 1–2 | Departure/originating mail center | Abgangsfrachtpostzentrum | 56 |
| 3–5 | Customer ID | Kundenkennung | 310 |
| 6–11 | Mailing / delivery number | Einlieferungsnummer | 243031 |
| 12 | Check digit | Prüfziffer | 3 |
The customer ID is assigned by Deutsche Post; the allocation scheme trades digits between the customer ID and the mailing number according to volume (a larger customer ID leaves fewer digits for the mailing number, and vice versa) 3. The combination of sender identity and unique mailing number is what makes each Identcode unique to one mail piece, enabling tracking 2.
Check digit (Modulo 10, weights 4 and 9). The Identcode check digit "deviates from the standard 2 of 5 interleaved weighting": instead of the ordinary ITF weights 3 and 1, the 11 data digits are weighted alternately 4 and 9 beginning from the left, the products are summed, the sum is reduced modulo 10, and the check digit is the complement to 10 of that remainder 3, 4, 5. Equivalently, it is the amount needed to round the weighted sum up to the next multiple of 10, which naturally yields 0 when the sum is already a multiple of 10 5.
Worked example for data 56310243031 3:
Digits: 5 6 3 1 0 2 4 3 0 3 1
Weights: 4 9 4 9 4 9 4 9 4 9 4
Products: 20 54 12 9 0 18 16 27 0 27 4 -> sum = 187
187 mod 10 = 7 -> check digit = 10 - 7 = 3
Full Identcode: 563102430313
This 4/9 weighting is identical to the algorithm used by the Deutsche Post Leitcode; the two differ only in data length (11 vs 13 data digits) and field meaning 3, 4.
Tracking vs routing. The Identcode is a tracking code: it uniquely identifies one mail piece (sender + mailing number) for Track & Trace from acceptance to delivery. The Leitcode is a routing code: it tells the sorting machinery the destination. The two are complementary and used together for automatic distribution 1, 2.
Use cases
- Track & Trace of postal packages across the Deutsche Post / DHL network, from acceptance to delivery, via the unique sender-plus-mailing-number identifier 2.
- Automatic freight distribution in mail centers, paired with the Leitcode for routing 1, 2.
- Supported as a labelling option across commercial reporting/label tools (DevExpress, FastReport, BarTender, Neodynamic, IDEAL, Aspose) for German postal compliance 3.
Implementations
Identcode, like Leitcode, is almost always a preset in general barcode libraries that apply the fixed 11+1 digit layout and the 4/9 check digit on top of an Interleaved 2 of 5 engine.
- zint/zint — C, ~771★, active 2026. Broad encoding library (50+ symbologies) supporting Deutsche Post Identcode and Leitcode [2 context; repo metadata].
- woo-j/OkapiBarcode — Java, ~394★, active 2026. Open-source generator covering 50+ standards including Deutsche Post Identcode/Leitcode.
- bwipp/postscriptbarcode (BWIPP, Barcode Writer in Pure PostScript) — PostScript, ~360★, active 2026. Implements Identcode as an ITF application; auto-computes the check digit when 11 digits are supplied, otherwise verifies the supplied check digit 1.
- rafsalvioni/zeus-barcode-dhl — PHP, ~1★, active 2025. Object-oriented API for creating/drawing/manipulating barcodes using DHL (Deutsche Post) standards.
- ActiveBarcode (commercial) auto-calculates the modulo-10 check digit for Identcode input 2; the Perl module Algorithm::CheckDigits::M10_005 implements the shared Identcode/Leitcode 4/9 check digit 4.
Comparison
Identcode vs Leitcode. Both are Deutsche Post ITF applications sharing the identical 4/9 modulo-10 check digit, but they answer different questions 1, 2, 3:
| Property | Identcode | Leitcode |
|---|---|---|
| Role | Identification / tracking | Routing / destination |
| Total length | 12 digits | 14 digits |
| Data digits | 11 | 13 |
| Field layout | mail center + customer ID + mailing number | PLZ + street + house + product |
| Question answered | Which item is it? | Where is it going? |
Both vs plain ITF-14. All three are Interleaved 2 of 5 codes but diverge on length and checksum 3, 7:
- ITF-14 is the GS1 application of ITF carrying a 14-digit GTIN (SCC-14) on shipping cartons, using the standard mod-10 check digit (weights 3 and 1) and typically framed by a bearer bar 7.
- Identcode is 12 digits and uses the Deutsche Post 4/9 check digit, not the GS1 3/1 check digit, and encodes sender/identification data rather than a GTIN 3.
- Leitcode is 14 digits with the same 4/9 check digit but carries address-routing data.
Although Leitcode and ITF-14 share the 14-digit length, neither is interchangeable with the Identcode or with each other: the field semantics and check-digit weighting all differ, so a generic ITF reader would mis-validate these postal codes 3, 7.
Status
The Identcode is in active production use by Deutsche Post / DHL for package identification and Track & Trace, and remains a standard preset across mainstream barcode libraries and commercial label tooling as of 2026 1, 2, 6. It coexists with 2D codes — Deutsche Post and DHL also make heavy use of Data Matrix for newer applications — but the 1D Identcode/Leitcode pair remains the documented tracking/routing format for the freight network 6.
Sources
- Deutsche Post Identcode — BWIPP wiki — Barcode Writer in Pure PostScript, 2026
- Identcode (Deutsche Post, DHL) barcode symbology — ActiveBarcode
- Identcode Deutsche Post — IDEAL Software Programming Manual
- Algorithm::CheckDigits::M10_005 — Deutsche Post Identcode/Leitcode (DE) — MetaCPAN
- Modulo 10 check-digit calculation for barcodes — ActiveBarcode
- Postal barcodes and how to read them — Scanbot SDK
- Interleaved 2 of 5 — Wikipedia
- Deutsche Post Identcode — Barcode Guide — Seagull Scientific (BarTender)
Deployments
No country reports mention this standard by name.