Code 39 Barcode Generator
100% private — runs on your device, never uploaded. Works offline once loaded.
Code 39 — also written Code 3 of 9 — is the older alphanumeric barcode still wired into asset registers, libraries, hospital systems and defence logistics, and it is often the only thing a decades-old scanner or label template will accept. It encodes capital letters, digits and the symbols - . space $ / + %, and every symbol is wrapped in the asterisk start and stop characters, which are added here automatically. It is roughly a third wider than Code 128 for the same content, so give it room. Type your value and download the PNG or SVG.
Where Code 39 is still the format in use
Code 39 is the oldest alphanumeric barcode in common use, and its staying power comes from how simple it is to decode: each character is nine elements, three of them wide, with no compression and no subset switching. That made it cheap to implement in 1974 and it means Code 39 is often the only symbology an old scanner, a fixed label template or a long-lived inventory system will accept. Health systems, libraries, asset registers, university stores and defence logistics all still run on it.
The cost of that simplicity is size. Code 39 is roughly 30 to 40% wider than Code 128 for the same content, and it cannot encode lower case at all. If nothing in your setup requires Code 39, Code 128 is the better choice; if something does, this page draws it correctly, asterisk delimiters included. Both, and nineteen others, are on the barcode generator.
The asterisks, and the character set
Code 39 marks the beginning and end of a symbol with an asterisk, and this tool adds both for you — you do not type them and a scanner does not report them as data. The characters available are the 26 capitals, the ten digits, and the seven symbols hyphen, full stop, space, dollar, slash, plus and percent. Nothing else: no lower case, no comma, no colon, no underscore. An extended encoding exists that represents the full ASCII set as pairs of those characters, but it depends on the scanner being configured for it, so it is not something to rely on. Where you need mixed case or arbitrary punctuation, Code 128 handles it natively.
Check digits and print size
Code 39 has an optional modulo-43 check character, which most systems using the format never turned on — it is absent here for the same reason. What matters far more in practice is the ratio between the wide and narrow elements, nominally around 3:1, and the width of the narrow element itself. Because Code 39 is already wide, the temptation is to shrink it until it fits, and that is exactly where it stops scanning. Widen the label or shorten the data instead, and keep the quiet zone on both sides.
Frequently asked questions
Why does my Code 39 have asterisks around it?
The asterisk is Code 39’s start and stop character — the specification requires it at both ends. It is added for you and is not part of the data a scanner reports.
Can Code 39 encode lower case letters?
Not in standard Code 39. If you need mixed case, use Code 128 instead, which is also considerably narrower for the same text.
Should I use Code 39 or Code 128?
Code 128 unless something in your setup insists on Code 39 — an old scanner, a fixed label template, a system that was specified in the 1990s. Code 128 packs the same data into far less space.
Why are there asterisks at the start and end?
The asterisk is Code 39’s start and stop character, required by the specification. It is added automatically and is not part of the data the scanner reports.
Can Code 39 encode lower case?
No. Standard Code 39 covers capitals, digits and the symbols - . space $ / + % only. Use Code 128 for mixed case.
Is Code 39 the same as Code 3 of 9?
Yes — two names for the same symbology, from the nine elements per character, three of which are wide.
Why is my Code 39 so much wider than a Code 128?
Because it encodes one character per nine elements with no compression. For the same content expect it to be 30 to 40% wider, which is the trade-off for how simply it decodes.
Advertisement