Code 39 Generator
Create a Code 39 barcode that encodes uppercase letters and digits, common in industrial and ID applications.
How to use in 3 steps
- 1
Enter the value
Type a value of uppercase letters, digits and a few symbols (- . $ / + % space).
- 2
Set options
Adjust an optional check character, height and module ratio.
- 3
Download
Export as PNG, SVG or PDF.
Supported formats
| Format | Dimension | Note |
|---|---|---|
| EAN-13 | 1D (linear) | 12 or 13 digits |
| EAN-8 | 1D (linear) | 7 or 8 digits |
| UPC-A | 1D (linear) | 11 or 12 digits |
| UPC-E | 1D (linear) | 6, 7 or 8 digits |
| Code 128 | 1D (linear) | ASCII characters |
| Code 39 | 1D (linear) | A-Z 0-9 - . $ / + % space |
| ITF-14 | 1D (linear) | 13 or 14 digits |
| Interleaved 2 of 5 | 1D (linear) | even number of digits |
| Codabar | 1D (linear) | digits and - $ : / . + |
| GS1-128 | 1D (linear) | e.g. (01)09506000134352 |
| Data Matrix | 2D (matrix) | any data |
| GS1 DataMatrix | 2D (matrix) | e.g. (01)09506000134352 |
| PDF417 | 2D (matrix) | any data |
| Aztec Code | 2D (matrix) | any data |
| QR Code | 2D (matrix) | any data |
| GS1 QR / Digital Link | 2D (matrix) | GS1 Digital Link URL or (01)... |
Example input / output
Input
ABC-123
Output
*ABC-123* · Code 39 · no check digit
Technical notes
Code 39 (Code 3 of 9) is an older but very widespread 1D barcode in use since 1974. It encodes a limited character set: A-Z uppercase, 0-9 digits and - . $ / + % plus space. It supports neither lowercase nor most symbols, so for richer data the Code 128 generator is a better fit.
Each character is built from 9 elements (5 bars + 4 spaces), 3 of which are wide — hence the name. This structure makes Code 39 easy to read but low-density: it carries the same data in a wider barcode than Code 128, so it isn't economical for long values.
A check digit is not mandatory in Code 39; many deployments use it without one. An optional mod-43 check character can be added, but not every scanner expects it, so make sure it matches your reader side.
Code 39 has historically been common in industrial settings, ID cards, and military and automotive inventory systems. A '*' start/stop character is added at the beginning and end; it is handled automatically and cannot be used inside your data.
Frequently asked questions
Standard Code 39 supports uppercase only. If you need lowercase or a wider character set, use Code 128.