This page is available in English.

Code 39 Barcode

The camera app can scan this. The Zebra app can scan this.

Code 39 was one of the first barcodes able to carry letters as well as numbers. It is self-checking, easy to print and still widely used for parts, asset tags and ID badges, framed by asterisk start and stop characters.

Also called Code 3 of 9, 3 of 9 barcode, USD-3, Alpha39.

In this family

Specifications

StandardISO/IEC 16388; ANSI/AIM BC1 (USS-39)
Character set43 characters: A-Z, 0-9, space and - . $ / + %
CapacityVariable (no fixed maximum; limited by symbol width)
Check digitOptional (modulo 43 is the standard option; PDF also offers modulo 36)
Dimension1D linear
OriginDeveloped by David Allais and Ray Stevens at Intermec in 1974

Where it is used

Automotive (AIAG), defence (LOGMARS), healthcare, ID badges, inventory

Parts labels, asset tags, and ID badges still use it because the character set is small and a check character is optional.

The asterisk at each end marks the start and the stop. Those marks are not part of the data.

Example

PRINTER

Scan and create

Create this code opens the barcode generator with this symbology and the sample text filled in.

The camera app can scan this. It returns the raw text. It does not open links, look up products, or start a payment. The desktop companion types that text into the focused field.

The Zebra app can scan this. It returns the raw text.

Related codes

Questions

Which characters can Code 39 encode?

The basic set is uppercase A to Z, digits 0 to 9, a space, and hyphen, full stop, dollar, slash, plus, and percent. Lowercase letters need Code 39 Full ASCII, which is a different encoding. The camera app can scan this and shows it as Code 39.

Why does Code 39 use asterisks?

The asterisk marks the start and the stop. It is not one of the data characters. An encoder adds those marks around a message such as PRINTER.

Does Code 39 need a check digit?

No. A modulo 43 check character is optional, and many asset tags omit it. The camera app can scan this. The Zebra app can scan this. They return the message characters and do not label one of them as a check.