Free Code 39 Barcode Generator

Code 39 accepts 0–9, a–z, space and - . $ / + %. Check digit: optional modulo 43 (not added here). Keep a quiet zone of 10 modules clear on each side of the printed symbol.

Choose a symbology

Retail & logistics

General purpose

2D symbols

Accepts: 0–9, A–Z, space and - . $ / + % · Check digit: Optional modulo 43 (not added here) · Quiet zone: 10 modules each side

Design

Bar colour
On white. Always clear.
Background
On white. Always clear.

Printed below the symbol. Long text wraps onto up to four lines.

Bars, the human-readable digits and the quiet zone are never covered — the caption and call-to-action sit below the symbol. Scanners need that clear margin to find the code.

Upload your logo

A logo can sit above or below a barcode only — anything placed over the bars stops it scanning.

Optional

PNG, JPG or WebP · Up to 2 MB · Stays on your device

When to use Code 39

Code 39 is the format to pick when the scanner or the system on the other end is old. Defence, automotive and long-running industrial inventories standardised on it decades ago, and it is still the safest bet for equipment that predates Code 128. It encodes a restricted character set and, in this tool as in most deployments, carries no check digit by default.

Read back by our scanner — Our exports were decoded back by our own scanner.

Frequently asked questions

Which characters does Code 39 accept?

Digits 0–9, capital letters A–Z, space, and the symbols - . $ / + %. Lower-case input is matched against the same set; anything outside it is rejected with the offending character named.

Is a check digit included?

No. The optional modulo 43 check character is not added here, which matches how most Code 39 installations are configured. If your system requires it, include it in the data you type.

Why is Code 39 wider than Code 128?

Each Code 39 character uses nine elements regardless of content, so the symbol grows quickly. For a long reference on a small label, Code 128 is usually the better choice.

Has this output actually been read back?

Our exported Code 39 images were decoded again by our own scanner during testing.