Free Code 39 Barcode Generator

🔒 Runs in your browser — nothing is sent to a server

Generate Code 39 barcodes online for free. Code 39 — often written "Code 3 of 9" — is one of the oldest widely-deployed 1D barcodes, standardised in 1974 and still mandated by US Department of Defense suppliers, healthcare systems, and many library and archive catalogues. It encodes uppercase letters A–Z, digits 0–9, and a small set of symbols ("-. $/+%"), framed by a distinctive asterisk start/stop pattern. Paste your data, adjust bar width and quiet zone, and export a print-ready PNG or SVG. The entire generation runs inside your browser — nothing is uploaded.

1. Select barcode type

2. Enter content and adjust style

A–Z, 0–9, symbols — e.g. ITEM-99

Style

3px
100px
15px

3. Preview and download

No barcode yet — click Generate

Copied!
Copied!

Where Code 39 is still required

Despite being a 50-year-old format, Code 39 retains hard requirements in several industries. US Department of Defense suppliers must use Code 39 on all shipping and parts labels (MIL-STD-129). Many hospital patient-wristband systems still scan Code 39. Most public libraries, academic libraries, and government archives carry Code 39 barcodes on book-spine labels and asset tags. If a specification explicitly names Code 39, use this generator; for anything new, reach for Code 128.

Printing considerations for Code 39

Code 39 is physically wider than modern alternatives, so plan the label layout first. The nominal X-dimension is 0.19 mm but should be increased to 0.25 mm or more for direct-thermal and dot-matrix printers. Keep a minimum quiet zone of 10× the X-dimension on each side. Because Code 39 is uppercase-only, convert input to uppercase before generating — lowercase input will be rejected.

FAQ

What is Code 39?

Code 39 is a discrete, variable-length 1D barcode introduced by Intermec in 1974 and later standardised as ISO/IEC 16388. The name comes from its original 39-character set (later expanded to 43). Each character is encoded as five bars and four spaces where three of the nine elements are wide — hence the alternative name "Code 3 of 9". Still dominant in defence, libraries, and healthcare.

What characters can Code 39 encode?

Standard Code 39 encodes uppercase letters A–Z, digits 0–9, and seven special characters: space, minus (-), period (.), dollar ($), slash (/), plus (+), and percent (%). Lowercase letters, punctuation, and non-ASCII characters are not supported. If you need the full ASCII range, switch to Code 128 — or use Code 39 Full ASCII encoding, where each ASCII character is represented by a two-character Code 39 pair.

Why does Code 39 only support uppercase?

The format pre-dates the widespread use of mixed-case printing in industrial labelling. Its designers prioritised a compact symbol set that could be reliably printed on impact printers and read by the simple optical scanners of the 1970s. Modern scanners would have no trouble with a larger alphabet, but the standard has remained unchanged to preserve backward compatibility with tens of millions of deployed labels.

Code 39 vs Code 128 — which should I choose?

Prefer Code 128 for any new project that does not have an explicit Code 39 requirement. Code 128 is more compact (roughly 30% narrower for the same payload), supports the full ASCII set, and has a built-in check character. Code 39 remains the right choice only when an existing system, partner, or government contract mandates it — most commonly defence (MIL-STD-129), libraries, and older hospital patient-wristband systems.

What is Code 39 Extended (Full ASCII)?

A convention that layers full ASCII support on top of standard Code 39 by representing each extended character as a two-symbol sequence using the unused "$", "/", "%", and "+" pairs. A lowercase "a", for example, is encoded as "+A". The scanner must be configured to decode the Full ASCII extension; otherwise it returns the literal pair. Most enterprise scanners support it, but confirm before shipping production labels.

Does Code 39 have a check character?

Not by default — standard Code 39 is check-character-free, which is why modern formats like Code 128 (with its built-in modulo-103 check) are more robust. An optional modulo-43 check character is defined in the standard and required by some military and medical specifications. This generator produces plain Code 39 without the check character; add it externally if your specification requires it.

Glossary

Code 39

A discrete, variable-length 1D barcode standardised as ISO/IEC 16388. Encodes uppercase letters, digits, and seven symbols by using three wide and six narrow elements per character — the origin of the "Code 3 of 9" nickname.

Code 39 Full ASCII

An encoding convention that extends Code 39 to the complete 128-character ASCII set by representing extended characters as two-symbol sequences prefixed with $, /, %, or +. Requires the scanner to be explicitly configured for Full ASCII decoding.

Start / stop character

The asterisk (*) pattern that frames every Code 39 barcode at both ends. Scanners use the start/stop symbols to locate the code and determine its reading direction; they never form part of the decoded data.

Modulo-43 check character

An optional trailing character computed by summing the numeric values of all data characters (A = 10, B = 11, and so on) modulo 43. Required by defence and some medical specifications, increasing integrity at the cost of one extra character of width.

Discrete barcode

A format where every character is fully self-contained with its own intercharacter gap — as opposed to continuous barcodes (like Code 128) where characters share bar boundaries. Discrete codes are easier to print on older thermal hardware but are wider for the same payload.

Related tools