ETEvoraTools
Barcode Generators

Code 39 Generator

Code 39 Generator renders data with the Code 39 symbology, commonly used for alphanumeric identifiers. Its basic alphabet is limited compared with Code 128, and applications differ on optional check digits, start/stop display, full-ASCII extensions, and required ratios. The page delegates accepted characters to bwip-js and does not configure an application-specific checksum.

Runs locally — files stay on your device
Quick answer

When is Code 39 preferable to Code 128?

It can suit legacy or explicitly specified workflows, but Code 128 is generally denser and supports broader data.

Code 39 represents characters with wide and narrow bars

The core symbology supports uppercase letters, digits, space, and a limited punctuation set. Start and stop patterns frame the encoded data.

How it works

Enter a value. bwip-js configured as code39 validates supported characters and renders a PNG canvas with readable text.

Key concepts

Low density increases width

The same data can occupy more space than Code 128.

Application checksum rules vary

Some workflows require a Mod 43 check character, but this page does not expose that choice.

When to use it

  • Create a label for an existing Code 39 workflow.
  • Test legacy scanner compatibility.
  • Encode a simple uppercase identifier.

When not to use it

  • Do not assume lowercase or every ASCII character is supported in basic mode.
  • Do not omit a required industry check digit.
  • Do not choose Code 39 when label width is constrained without testing.

Worked examples

Asset label

Input
ASSET-42
Expected output
Code 39 PNG

The characters belong to the basic alphabet.

Lowercase

Input
asset-42
Expected output
May be rejected or transformed by encoder policy

Basic Code 39 is uppercase-oriented.

Long identifier

Input
A very long supported string
Expected output
Wide symbol

Linear density limits matter.

Common mistakes

Ignoring the required alphabet

Unsupported characters cannot be represented in basic Code 39. Correction: Validate against the target specification.

Forgetting checksum policy

Scanner/application expectations can differ. Correction: Confirm whether Mod 43 is required.

Printing too narrow

Bars lose distinguishability. Correction: Use adequate x-dimension and quiet zones.

Best practices

  • Follow the receiving system's symbology profile.
  • Keep identifiers short and uppercase when possible.
  • Verify printed labels end to end.

Related operations and differences

Code 128 Generator

Choose Code 128 Generator when you need to generate a downloadable Code 128 barcode.; use Code 39 Generator specifically for barcode code39.

EAN-13 Generator

Choose EAN-13 Generator when you need to generate an EAN-13 retail barcode.; use Code 39 Generator specifically for barcode code39.

EAN-8 Generator

Choose EAN-8 Generator when you need to generate a compact EAN-8 barcode.; use Code 39 Generator specifically for barcode code39.

UPC-A Generator

Choose UPC-A Generator when you need to generate a UPC-A product barcode.; use Code 39 Generator specifically for barcode code39.

Bitcoin Payment QR Code

Choose Bitcoin Payment QR Code when you need to create a Bitcoin payment URI QR code.; use Code 39 Generator specifically for barcode code39.

Contact vCard QR Code

Choose Contact vCard QR Code when you need to create a contact card QR code.; use Code 39 Generator specifically for barcode code39.

Limitations and privacy

  • Basic bwip-js Code 39 configuration only.
  • No exposed Mod 43 option, full-ASCII policy, application profile, or print verification.
  • Accepted characters follow library behavior.

Generation happens locally in this browser. The PNG contains the entered payload, so share it with the same care as the underlying data.

Frequently asked questions

Does basic Code 39 support lowercase?

Not in its core alphabet.

Is a check digit always required?

It depends on the application.

Is it denser than Code 128?

Generally no.

Does this verify printed labels?

No.