Code Smith

Code 39 Barcode Generator

One of the oldest barcodes still in daily use. It takes uppercase letters, digits and a handful of symbols, and virtually every scanner ever built can read it.

It is self-checking, which is why a check digit is optional, and that simplicity is most of why it is still specified in defense, automotive and library systems. The costs are real: there is no lowercase without a Full ASCII extension, and it runs markedly wider than Code 128 for the same digits.

Used for
  • Industrial and warehouse labeling
  • Asset tags
  • Defense and government
  • Healthcare

Barcode Format

Alphanumeric with special characters

Quick Select

Content

A-Z, 0-9, - . $ / + % space

Dimensions

2
100
10

Colors

#000000
#FFFFFF

Text Options

16
2

Preview

Enter content to generate barcode

Format Guide

CODE 39 — Alphanumeric with special characters.

A-Z, 0-9, - . $ / + % space

What is Code 39?

Code 39 is one of the oldest barcodes still in everyday use, and its longevity is the point: virtually every scanner ever built reads it. Each character is nine elements, three of them wide, which is where the name comes from. It encodes digits, uppercase letters, the space and a handful of punctuation, 43 characters in all, and it is self-checking, meaning a single misread element produces an invalid character rather than a wrong one.

Technical characteristics

Character set
43 characters: 0–9, A–Z, space, and - . $ / + %
Length
Variable
Check digit
Optional modulo 43, defined by the standard
Self-checking
A single printing or reading error yields an invalid character, not a wrong one
Density
Roughly a third wider than Code 128 for the same data

Why a 1974 barcode is still in service

Code 39 is less dense than Code 128, holds a smaller character set, and produces wider labels for the same data. It is nevertheless everywhere in defense, automotive, healthcare and library systems, and the reasons are worth understanding before you replace it.

  • It is self-checking. Each character is constructed so that a misread is far more likely to fail than to produce a different valid character, which is why a check digit is optional rather than required.
  • Everything reads it. There is no equipment old enough to matter that does not support Code 39, which is a real property when the reader on the loading dock is twenty years old.
  • It is easy to produce. The bars are simple and it tolerates poor printing better than denser formats, because its narrow element is comparatively wide.

The character set, and what Full ASCII costs

Standard Code 39 encodes digits, uppercase letters, the space and a handful of symbols. There is no lowercase. An asterisk is conventionally used to mark the start and end of the symbol and is not part of your data.

Full ASCII mode extends that by encoding the missing characters as two-character sequences. It works, and it doubles the width of every character that needs it, which on an already-wide format is a real cost. If your data needs lowercase, that is usually the signal to use Code 128 instead.

It is wide, and you should plan for that

Each character is nine elements, three of them wide, plus a gap before the next one. For a long numeric string that can run to more than twice the width Code 128 would need for the same digits, because Code 128 packs numbers two to a character and Code 39 cannot.

Code 39 FAQs

Why does my text come out in capitals?

Code 39 has no lowercase letters in its character set. If you need mixed case, Code 128 is the format that carries it.

Why are the asterisks there?

The asterisk is Code 39's start and stop character. It is part of the symbol rather than part of your data, and scanners strip it.

Should I use Code 39 for a new system?

Usually not. Code 128 is denser and carries a wider character set. Code 39 is the right answer when a standard, a customer or existing equipment calls for it specifically.

Which characters can I actually use?

A to Z, 0 to 9, space, and the six symbols - . $ / + % — nothing else. Lower case is accepted in the field and encoded as capitals, because the format has no lower case at all. Anything outside that set is refused before a symbol is drawn, which is the moment to switch to Code 128.

Related formats