MakeQR

CODE 39 Barcode Generator

CODE 39 is the old industrial standard, and it survives because so much still depends on it: automotive supply chains, defence labelling under LOGMARS and older MIL-STD requirements, healthcare systems and a long tail of equipment too expensive to replace. It encodes uppercase letters, digits, space and the symbols - . $ / + %, which is a deliberately small set, and it wraps the data in asterisk start and stop characters. Two properties keep it in service. It is self-checking, meaning a single misprinted element cannot decode as a different valid character, and every scanner ever built reads it without configuration. The cost is width: CODE 39 needs roughly 40% more space than CODE 128 for the same content. If a specification does not require it, use CODE 128 instead. Generated in your browser — part numbers are never uploaded.

This content is not valid for the selected format — EAN-13 needs 12–13 digits, UPC-A needs 11–12.

Self-checking, and what that actually buys you

Each CODE 39 character is nine elements, three of them wide, and that fixed structure is checked as the scanner decodes. A printing defect that alters one element produces an invalid pattern rather than a different valid character, so the symbol fails to read instead of reading wrong.

That is a meaningful safety property in an environment where labels get printed on worn thermal printers and read in poor conditions. It is not the same as a check digit covering the whole message, though: an optional modulo-43 check character exists for that, required by some specifications and ignored by most general use.

Why it is so wide

Every character takes the same nine elements regardless of what it is, and there is no numeric compression of the kind CODE 128's subset C provides. A twelve-character part number can therefore run half as wide again as the same string in CODE 128.

On a large carton that is irrelevant. On a small component label or a cable flag it is the deciding constraint, and it is the usual reason a legacy scheme gets migrated. Full ASCII CODE 39, which encodes lowercase and symbols as two-character sequences, roughly doubles the width again — a workaround rather than a feature.

The asterisks and the character set

The symbol is delimited by an asterisk at each end. Most software adds these automatically, and this generator does; the confusion arises when a system prints the human-readable line as *PART-1234* and someone types the asterisks into a field expecting the bare value.

The character set is uppercase only. Lowercase input is a common source of failure — it either gets silently uppercased or rejected, depending on the encoder. If your identifiers are case-sensitive, CODE 39 cannot represent them and the choice is already made for you.

When a specification is the reason

Choose CODE 39 when something external requires it: a customer's inbound labelling standard, a defence contract citing MIL-STD-129, an existing scanner fleet configured for it, or a database of historical labels that must stay readable alongside new ones.

For anything genuinely new and internal, CODE 128 is denser, supports lowercase and carries a proper check character. The exception is where labels may be read by very old or oddly configured equipment you do not control — CODE 39's universality is its last real advantage, and occasionally it is the one that matters.

Other barcode formats: all formats, CODE128 Barcode Generator, EAN-13 Barcode Generator, UPC-A Barcode Generator. Need a QR code instead? Generate one free.

Frequently asked questions

Is this barcode generator really free, and is my data uploaded?

Yes, free with no sign-up or watermark. The barcode is drawn in your browser — whatever you type is never sent to a server, so product codes and internal part numbers stay on your device.

What characters can CODE 39 encode?

Uppercase A–Z, digits 0–9, space, and the symbols - . $ / + %. Lowercase is not supported — if you need it, use CODE 128 instead.

Why is my CODE 39 barcode so wide?

CODE 39 uses nine bars per character, so it is roughly 30% wider than CODE 128 for the same content. For long values on a small label, CODE 128 is the better fit.

Does CODE 39 need a check digit?

Not usually. The optional modulo-43 check digit is required only by specific standards such as LOGMARS and HIBC; most applications omit it.

Advertisement