BarcodeSheets

Code 39 Barcode Generator

Encode uppercase letters, digits, and a handful of symbols as a Code 39 barcode — free, unlimited, and ready for asset tags or legacy scanners.

Unlimited — no caps SVG & print-res PNG free No account 100% in your browser

What Code 39 encodes

Code 39 is one of the oldest alphanumeric barcode symbologies still in common use. It encodes a 43-character set: the digits 0-9, uppercase letters A-Z, a space, and six symbols (- . $ / + %). There's no native lowercase support — type lowercase letters and most encoders (including this one) will convert them to uppercase automatically, since Code 39 simply has no symbol for them. It's a solid choice for internal labels where the reading equipment might be older or lower-cost than what a modern retail scanner uses.

Start/stop characters and length rules

Every Code 39 barcode is framed by an asterisk (*) at the start and another at the end — that's how a scanner knows where the barcode begins and ends. The asterisk is reserved for this purpose; it isn't one of the 43 data characters you can encode, and most generators (this one included) add the start/stop asterisks automatically so you don't need to type them yourself.

Length rules

Code 39 has no official maximum length, but it's a low-density symbology — each character takes up more physical width than the equivalent character in Code 128 — so long strings get wide fast. It's best suited to short identifiers: asset tags, badge numbers, and short alphanumeric codes rather than long free-text strings.

Check digit

Unlike EAN-13 or UPC-A, Code 39 has no mandatory check digit — the barcode is valid, and most scanners will read it, without one. An optional Modulo 43 check character exists in the specification for higher-accuracy environments (defense and some industrial supply-chain applications require it), but the large majority of Code 39 barcodes in the wild — asset tags, name badges, internal labels — skip it. If your use case doesn't specifically call for Modulo 43, there's no need to add it.

Where Code 39 is used

Code 39 predates most modern retail scanning infrastructure and isn't used at point-of-sale. Where it still shows up: internal asset and equipment tracking, name badges and ID cards, automotive and defense supply-chain labeling (some AIAG and MIL-STD specifications call for it specifically), and older warehouse or library systems that were built around it decades ago and never migrated. If you're labeling something for a general audience or a modern scanning system with no legacy constraint, Code 128 usually encodes the same data more compactly.

Sizing and printing guidance

Code 39's recommended minimum quiet zone — the clear margin with nothing printed on either side of the bars — is 10 times the narrow bar width (the x-dimension), the same rule of thumb as Code 128. At a 0.25 mm x-dimension, that's about a 2.5 mm clear margin each side; because Code 39 is already wider than Code 128 for the same data, skimping on quiet zone is an even more common cause of scan failures.

Printing guidance

Print at 300 dpi or higher for labels that need to scan reliably — thermal-transfer printers handle Code 39 well, and even basic laser printers are usually fine at that resolution. Don't scale a barcode below about 80% of its designed size, and keep bars pure black on a white or light background for maximum contrast.

Frequently asked questions

Do Code 39 barcodes need a check digit?

No. Code 39 has no mandatory check digit, and most scanners read it fine without one. An optional Modulo 43 check character exists for higher-accuracy environments like some defense and automotive supply-chain specifications, but the majority of Code 39 barcodes — asset tags, badges, internal labels — skip it.

What characters can Code 39 encode?

A 43-character set: digits 0-9, uppercase letters A-Z, a space, and the symbols - . $ / + %. There's no lowercase support — lowercase input gets converted to uppercase automatically, since Code 39 has no symbol for it.

What is the asterisk in a Code 39 barcode?

The asterisk (*) is the start and stop character that frames every Code 39 barcode, telling a scanner where the code begins and ends. It isn't a data character — most generators, including this one, add it automatically.

Is Code 39 still used?

Yes, though mostly for internal and legacy uses rather than new retail systems: asset tracking, name badges, and some automotive and defense supply-chain labeling still specify it. For a general-purpose barcode today, Code 128 usually encodes the same data in less space.

What's the difference between Code 39 and Code 128?

Code 128 is denser (shorter barcodes for the same data) and supports the full ASCII set, including lowercase letters. Code 39 supports a smaller 43-character set and takes up more physical width, but is simpler for very old or low-cost scanners to read. See our Code 128 generator at /code-128 for details.