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.