Practical Tools
Marketing

Code 39 Barcode Generator

Code 39 (also known as 3 of 9) is one of the oldest and most widely supported barcode formats. It encodes uppercase letters (A-Z), digits (0-9), and a small set of symbols (hyphen, period, space, dollar sign, slash, plus, percent). It is the standard format for US Department of Defense asset tags, automotive parts labels, healthcare ID badges, and many legacy inventory systems. This free generator auto-uppercases your input, highlights any characters not supported by Code 39, and downloads a clean PNG or SVG.

Valid characters: A-Z, 0-9, space, and - . $ / + %. Input is auto-uppercased.

About Code 39

Encodes uppercase letters (A-Z), digits (0-9), and a limited set of symbols. Widely used for asset tags, badge IDs, and automotive labels. No check digit is required, but the format is self-checking due to its alternating bar/space pattern.

How to use this tool

  1. 1Type or paste your value. Input is automatically converted to uppercase as you type.
  2. 2Code 39 supports A-Z, 0-9, and these symbols: - . space $ / + %. Any other character is removed automatically.
  3. 3If characters are removed, the encoded value shown in the hint differs from your raw input - check it before downloading.
  4. 4The barcode preview updates in real time once the value is valid.
  5. 5Click Download PNG or Download SVG to save.

Example

Asset tag for office equipment

Value: ASSET-0042. Code 39 encodes the uppercase letters, digits, and hyphen without any issues. Download PNG and print on a small tamper-evident label. The barcode scanner reads ASSET-0042 which maps to the equipment record in the asset tracking database.

Healthcare specimen label

Value: LAB/20240601/0092. Code 39 handles uppercase letters, digits, and slash. Download SVG for inclusion in the laboratory information system's label template. The compact format is readable by older barcode scanners commonly found in clinical settings.

Common use cases

  • Printing asset tags for office equipment, tools, and furniture
  • Creating ID badge barcodes where the scanner is a legacy Code 39 reader
  • Labelling automotive parts and sub-assemblies in manufacturing
  • Generating specimen and sample barcodes for healthcare and laboratory use
  • Producing compliance labels for US Department of Defense or government contractors who require Code 39

Common mistakes

  • Including lowercase letters - Code 39 only supports uppercase; the tool auto-converts, but if you copy the value from elsewhere check it is all uppercase.
  • Using characters outside the supported set (e.g. @, !, #, brackets) - Code 39 supports only A-Z, 0-9 and - . space $ / + %; unsupported characters are stripped silently.
  • Assuming Code 39 barcodes are always shorter than Code 128 - Code 39 is actually less dense and produces wider barcodes for the same data; use Code 128 when label space is limited.

Frequently asked questions

What is Code 39?

Code 39 (also called 3 of 9 or USS Code 39) is a variable-length barcode format that encodes uppercase letters A-Z, digits 0-9, and seven special characters. It is one of the first alphanumeric barcodes and remains widely used in industries that adopted it early: US military, automotive, healthcare, and government.

Does Code 39 have a check digit?

Code 39 does not require a check digit - the format is self-checking by design. An optional modulo-43 check character exists in some implementations (common in healthcare), but it is not widely used and is not included by default. For most applications, Code 39 without a check character is correct.

Code 39 vs Code 128 - when should I use Code 39?

Use Code 39 when compatibility with older scanners or legacy systems is required, or when an industry standard mandates it (e.g. US DoD UID labels). Use Code 128 for everything else - it is denser, supports more characters including lowercase, and is universally compatible with modern scanners.

Is my data sent to a server?

No. All barcode generation runs in your browser. Your data is never sent to any server.

Related tools

Last updated