# Pharmacode

> Source: https://docs.barcoder.ai/docs/standards/pharmacode
> research date 2026-06-03 · extracted at 2026-10-03
> Publisher: Barcoder — encyclopedia of QR, barcode and payment-code standards

Specifications:
- [PHARMA-CODE - One-Track - BarTender Barcode Guide](https://barcodeguide.seagullscientific.com/content/symbologies/phamacode.htm)
- [PHARMA-CODE Series #1: Introduction to Laetus PHARMA-CODE](https://www.laetus.com/en/knowledge-base/blog/pharma-code-series-1-introduction-to-laetus-pharma-code/)
- [Pharmacode - Wikipedia](https://en.wikipedia.org/wiki/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 <sup>[3][3]</sup>. 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 <sup>[1][1]</sup> <sup>[2][2]</sup>. It is read from right to left; scanning left to right yields a different value because of the binary nature of the encoding <sup>[2][2]</sup>.

## History

Pharmacode was developed by the German company **Laetus**, and the standard is formally known as the **Laetus PHARMA-CODE** <sup>[2][2]</sup> <sup>[3][3]</sup>. Laetus describes PHARMA-CODE as "older than UPC," having been used to prevent product intermixture in pharmaceutical packaging for "over 50 years" <sup>[2][2]</sup>. 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" <sup>[2][2]</sup>.

## 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 <sup>[3][3]</sup>.
- **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 <sup>[1][1]</sup> <sup>[3][3]</sup>.
- **Bar count.** Between 2 and 16 bars <sup>[1][1]</sup> <sup>[3][3]</sup>. For reliability, best practice is to always use at least three bars and to mix both thick and thin bars <sup>[3][3]</sup>.
- **No check digit.** PHARMA-CODE includes no check digit <sup>[1][1]</sup>.
- **No start/stop characters.** The symbol carries no start or stop pattern; the guide lists only an optional start bar and optional end bar <sup>[1][1]</sup> <sup>[2][2]</sup>.
- **Scan direction.** Read **right to left**; left-to-right scanning produces a different result <sup>[2][2]</sup>.
- **Quiet zone.** A quiet zone of **6 mm** is required on either side of the symbol <sup>[1][1]</sup>.
- **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 <sup>[2][2]</sup> <sup>[3][3]</sup>.
- **Decoding.** When a camera reads the binary pattern, a PHARMA-CODE decoder must be integrated to translate the binary value into a numeric format <sup>[2][2]</sup>.

## 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 <sup>[1][1]</sup>. 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 <sup>[2][2]</sup>. Laetus positions it as a cost-effective alternative to HIBC/GS1 codes for internal control because using the symbology carries no licensing cost <sup>[2][2]</sup>.

## Implementations

- **JsBarcode** ([github.com/lindell/JsBarcode](https://github.com/lindell/JsBarcode)) — JavaScript, 5,864 stars, active 2026. Browser/Node barcode generator with a `pharmacode` format encoding 3–131070 <sup>[1][1]</sup>.
- **Zint** ([github.com/zint/zint](https://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](https://github.com/metafloor/bwip-js)) — JavaScript, 2,381 stars, active 2026. JavaScript port of BWIPP.
- **BWIPP** ([github.com/bwipp/postscriptbarcode](https://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 <sup>[1][1]</sup>, whereas the two-track variant uses two **bar heights** across two vertical tracks to extend the range up to 64,570,080 <sup>[4][4]</sup>. Both lack a check digit and require a 6 mm quiet zone <sup>[1][1]</sup> <sup>[4][4]</sup>. 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 <sup>[2][2]</sup>.
- Laetus claims PHARMA-CODE predates the UPC and has been in continuous pharmaceutical use for more than half a century <sup>[2][2]</sup>.

## 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) <sup>[1][1]</sup>. It is complementary to, rather than competing with, the retail and serialization codes (GS1 DataMatrix, etc.) printed on the outside of packages.

## Sources

[1]: https://barcodeguide.seagullscientific.com/content/symbologies/phamacode.htm
[2]: https://www.laetus.com/en/knowledge-base/blog/pharma-code-series-1-introduction-to-laetus-pharma-code/
[3]: https://en.wikipedia.org/wiki/Pharmacode
[4]: https://barcodeguide.seagullscientific.com/Content/Symbologies/TwoTrackPharmacode.htm

[1] [PHARMA-CODE - One-Track - BarTender Barcode Guide](https://barcodeguide.seagullscientific.com/content/symbologies/phamacode.htm) — Seagull Scientific, accessed 2026
[2] [PHARMA-CODE Series #1: Introduction to Laetus PHARMA-CODE](https://www.laetus.com/en/knowledge-base/blog/pharma-code-series-1-introduction-to-laetus-pharma-code/) — Laetus GmbH
[3] [Pharmacode](https://en.wikipedia.org/wiki/Pharmacode) — Wikipedia, accessed 2026
[4] [PHARMA-CODE - Two-Track - BarTender Barcode Guide](https://barcodeguide.seagullscientific.com/Content/Symbologies/TwoTrackPharmacode.htm) — Seagull Scientific, accessed 2026

## Deployments

_No country reports mention this standard by name._

## Regions / aggregations not mapped to a single country

- Universal
