Standards/pharmacode
Pharmacode
Overview
Pharmacode, also called the Pharmaceutical Binary Code or Laetus code, is a barcode standard used in the pharmaceutical industry as a packing-control system, designed to remain readable despite printing errors [3]. It encodes a single integer value as a sequence of alternating dark and light bars of two widths — narrow and wide — with no start/stop characters, no check digit and no human-readable text in the symbol itself [1] [2]. It is read from right to left; scanning left to right yields a different value because of the binary nature of the encoding [2].
History
Pharmacode was developed by the German company Laetus, and the standard is formally known as the Laetus PHARMA-CODE [2] [3]. Laetus describes PHARMA-CODE as "older than UPC," having been used to prevent product intermixture in pharmaceutical packaging for "over 50 years" [2]. Its purpose is closed-loop, in-house packaging verification rather than retail identification: the code "matches and validates all of the component parts of a package to ensure that the right product, with all of its required documentation, goes into the right package" [2].
Technical specification
- Encoding. Data is encoded in binary rather than decimal, using two bar widths: narrow and wide. Each narrow bar contributes 2^n and each wide bar contributes 2 × 2^n, where n is the bar's position [3].
- Value range. Pharmacode represents a single integer from 3 to 131,070. The minimum (3) is two narrow bars; the maximum (131,070) is sixteen wide bars [1] [3].
- Bar count. Between 2 and 16 bars [1] [3]. For reliability, best practice is to always use at least three bars and to mix both thick and thin bars [3].
- No check digit. PHARMA-CODE includes no check digit [1].
- No start/stop characters. The symbol carries no start or stop pattern; the guide lists only an optional start bar and optional end bar [1] [2].
- Scan direction. Read right to left; left-to-right scanning produces a different result [2].
- Quiet zone. A quiet zone of 6 mm is required on either side of the symbol [1].
- Colour and robustness. PHARMA-CODE can be printed in a range of colours so that colour-coded package inserts can themselves be verified, and the symbology is deliberately tolerant of printing imperfections [2] [3].
- Decoding. When a camera reads the binary pattern, a PHARMA-CODE decoder must be integrated to translate the binary value into a numeric format [2].
Use cases
PHARMA-CODE is used for in-house inventory control and packaging security verification, ensuring that packaging materials and contents match and are correct [1]. It is typically printed on an inside flap of the pharmaceutical package and is not visible at point of sale, which is acceptable because it is a closed-loop control code rather than a retail identifier [2]. Laetus positions it as a cost-effective alternative to HIBC/GS1 codes for internal control because using the symbology carries no licensing cost [2].
Implementations
- JsBarcode (github.com/lindell/JsBarcode) — JavaScript, 5,864 stars, active 2026. Browser/Node barcode generator with a
pharmacodeformat encoding 3–131070 [1]. - Zint (github.com/zint/zint) — C, 771 stars, active 2026. Encoding library supporting Pharmacode One-Track among 50+ symbologies.
- bwip-js (github.com/metafloor/bwip-js) — JavaScript, 2,381 stars, active 2026. JavaScript port of BWIPP.
- BWIPP (github.com/bwipp/postscriptbarcode) — PostScript, 499 stars, active 2026. Barcode Writer in Pure PostScript.
Comparison
Pharmacode (one-track) and Two-Track Pharmacode are both Laetus packaging-control symbologies, but the one-track variant uses two bar widths to encode a single value from 3 to 131,070 [1], whereas the two-track variant uses two bar heights across two vertical tracks to extend the range up to 64,570,080 [4]. Both lack a check digit and require a 6 mm quiet zone [1] [4]. Unlike Code 32 (Italian Pharmacode) and PZN, which are Code 39 derivatives carrying nationally administered drug numbers, Pharmacode is a self-contained binary code with no national registry and no human-readable interpretation in the symbol.
Fun facts
- Because the code is read right to left and is pure binary, the same physical symbol scanned in the opposite direction decodes to a different, valid-looking number — a property that makes scan-direction handling a deliberate part of any decoder [2].
- Laetus claims PHARMA-CODE predates the UPC and has been in continuous pharmaceutical use for more than half a century [2].
Status
Pharmacode remains in active, widespread use as a closed-loop packaging-control and print-verification code in pharmaceutical manufacturing, and is supported by current barcode tooling including JsBarcode (release v3.12.3, January 2026) [1]. It is complementary to, rather than competing with, the retail and serialization codes (GS1 DataMatrix, etc.) printed on the outside of packages.
Sources
1 PHARMA-CODE - One-Track - BarTender Barcode Guide — Seagull Scientific, accessed 2026 2 PHARMA-CODE Series #1: Introduction to Laetus PHARMA-CODE — Laetus GmbH 3 Pharmacode — Wikipedia, accessed 2026 4 PHARMA-CODE - Two-Track - BarTender Barcode Guide — Seagull Scientific, accessed 2026
Deployments
No country reports mention this standard by name.
Regions / aggregations not mapped to a single country
- Universal