Free Codabar Barcode Generator

Codabar accepts 0–9 and - $ : / . + between a/b/c/d start and stop characters. Check digit: none in this implementation. 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 and - $ : / . + between A/B/C/D start and stop characters · Check digit: None in this implementation · 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 Codabar

Codabar survives where the systems around it never changed: library circulation desks, blood bank bags, photo-processing envelopes and some courier tickets. Its start and stop characters (A, B, C or D) can carry meaning in those systems, so match whatever your existing labels already use rather than picking one at random.

Read back by our scanner — Decoded back with every A/B/C/D start and stop pair. Some scanners must be configured to accept Codabar at all.

Frequently asked questions

What are the A, B, C and D characters for?

They mark the start and the stop of the symbol, and in some deployments the pair chosen also signals what kind of record the number is. The data between them may use digits and - $ : / . +.

Does Codabar have a check digit?

Not in this implementation. Some sectors apply their own modulo 16 scheme on top; if yours does, include the check character in the data you type.

Will any scanner read it?

Many handheld scanners ship with Codabar disabled and must be configured to accept it. Test on the actual device before rolling out labels.

Has this output actually been read back?

Our exports were decoded back with every A/B/C/D start and stop pair during testing.