Skip to main content

Code 39

General & Common CodesAlso known as: Code 39

Published by the QRinsec Editorial Team — practical documentation about QR codes, barcode standards, and QRinsec’s client-side tools. Content is reviewed against product testing and published technical documentation from sources such as GS1, Denso Wave, and ISO standards where applicable.

Have questions or corrections? Contact us.

Code 39 (also called Code 3 of 9) is one of the oldest alphanumeric 1D barcodes, encoding uppercase A–Z, digits 0–9 and a few symbols; it is self-checking but relatively low density.

Important Notice

Code 39 does not natively support lowercase letters — use Code 39 Full ASCII extension or switch to Code 128.

Important Notice

The optional Modulo 43 check digit is mandatory in HIBC and some DoD applications — verify your specification.

Key Facts

Characters
43 (A–Z, 0–9, 7 symbols)
Length
Variable
Check Digit
Optional (Mod 43)
Start/Stop
Asterisk (*)
Common Use
DoD / automotive / HIBC

What is a Code 39 barcode?

Code 39 (also called Code 3 of 9) is one of the oldest and most widely used linear barcode symbologies, introduced in 1974 by Intermec. It encodes 43 characters: uppercase A–Z, digits 0–9, and seven special characters (- . $ / + % SPACE). Code 39 is self-checking, meaning each character contains a built-in parity check, making an additional check digit optional (though recommended for critical applications). It is dominant in US Department of Defense and automotive supply-chain labelling.

Symbol structure

Each Code 39 character is represented by 5 bars and 4 spaces (9 elements total), with 3 of the 9 elements being wide — hence '3 of 9'. The symbol begins and ends with a special asterisk (*) start/stop character, which also appears in the human-readable text. Between characters, a narrow inter-character gap separates each codeword.

Optional check digit (Modulo 43)

  1. Assign each character its Code 39 numeric value (A=10, B=11, … Z=35; 0–9=0–9; special chars=36–42).
  2. Sum all character values.
  3. Check character = value at (sum mod 43) in the Code 39 character table.

Code 39 Full ASCII extends the character set to all 128 ASCII by encoding each additional character as a two-character pair using the special symbols.

Code 39 vs. Code 128 vs. Code 93

Code 39 is simpler to implement and widely supported, but generates larger barcodes than Code 128 (approx. 30% wider for the same data). Code 93 offers similar compactness to Code 128 but is less universally supported. For new designs, Code 128 is generally preferred over Code 39 unless regulations or legacy systems require Code 39.

When to use Code 39

Code 39 is required or preferred in: US DoD MIL-STD-129 shipping labels, AIAG automotive supply chain labels, healthcare device labelling (HIBC standard), and many government and aerospace identification applications. Use Code 128 instead when space is limited or data contains lowercase letters.

Printing requirements

Recommended X-dimension: 0.25 mm–1.02 mm. Wide-to-narrow ratio: 2:1 to 3:1 (2.5:1 optimal). Quiet zones: 10× X-dimension (minimum 6.35 mm). No mandatory height, but a height ≥15% of symbol length is recommended. Always print the asterisk (*) start/stop in the human-readable line.

Common scanning failures

Incorrect wide-to-narrow ratio (too close to 1:1) is the leading cause of Code 39 read failures. Ink spread on thermal printers can merge narrow bars into wide elements. Always test the wide-to-narrow ratio with a verifier before production.

Comparison

FeatureCode 39Code 128Code 93
Character Set43 characters128 ASCII47 characters
DensityLow–MediumHighHigh
Check DigitOptionalMandatory2 mandatory
Common UseDoD / automotiveShipping / logisticsInventory

Frequently Asked Questions

Does Code 39 support lowercase letters?

Not natively. Code 39 Full ASCII extends the symbology to all 128 ASCII characters by encoding each extra character as a two-character sequence, but this doubles the barcode length for those characters.

Is the check digit mandatory in Code 39?

No, it is optional in the base standard. However, HIBC (Health Industry Bar Code) and US DoD applications require the Modulo 43 check digit.

Why is Code 39 wider than Code 128 for the same data?

Code 39 uses 9 elements (5 bars + 4 spaces) per character with a mandatory inter-character gap, while Code 128 uses variable-width codewords with no inter-character gaps, making it approximately 30% more space-efficient.

What does the asterisk (*) mean in Code 39?

The asterisk is the Code 39 start and stop character. It appears in the human-readable text below the barcode and tells the scanner where the symbol begins and ends.

Can Code 39 be read by all barcode scanners?

Yes. Code 39 is one of the most universally supported linear symbologies and is readable by virtually all laser and CCD barcode scanners.

Need to create a Code 39 barcode?

Generate high-quality, scannable Code 39 barcodes for free with our advanced barcode generator. Download in vector SVG or PNG format.

Create Code 39 Barcode Now