Skip to content
barcoder

Standards/deutsche-post-identcode

Deutsche Post Identcode

Type1D Linear (ITF)
PrimaryDE
Completeness76%high

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

  1. Deutsche Post Identcode — BWIPP wiki — Barcode Writer in Pure PostScript, 2026
  2. Identcode (Deutsche Post, DHL) barcode symbology — ActiveBarcode
  3. Identcode Deutsche Post — IDEAL Software Programming Manual
  4. Algorithm::CheckDigits::M10_005 — Deutsche Post Identcode/Leitcode (DE) — MetaCPAN
  5. Modulo 10 check-digit calculation for barcodes — ActiveBarcode
  6. Postal barcodes and how to read them — Scanbot SDK
  7. Interleaved 2 of 5 — Wikipedia
  8. Deutsche Post Identcode — Barcode Guide — Seagull Scientific (BarTender)

Deployments

No country reports mention this standard by name.

source · docs/standards/deutsche-post-identcode/index.md