Code 39 (USD-3)
- 2 minutes to read
Code 39, also known as Code 3 of 9 or USD-3, is a widely used alphanumeric barcode symbology designed for non-retail applications. It encodes 43 characters, including uppercase letters, digits, and a limited set of special characters.
Code 39 is commonly used in industrial, manufacturing, and logistics environments. The United States Department of Defense and the Health Industry Bar Code Council (HIBCC) also use Code 39 in standardized labeling systems.

Refer to the following page for additional information: https://en.wikipedia.org/wiki/Code_39
Configure Code 39 (USD-3) Settings
Use the Code39Options class to configure Code 39 barcode settings.
| Method | Description |
|---|---|
| setCalculateChecksum(boolean value) | Specifies whether to calculate and append a Modulo-43 check character. |
| setWideNarrowRatio(float value) | Specifies the ratio between wide and narrow bars and spaces in the barcode. |
The following code snippet creates a Code 39 (USD-3) barcode and customizes its encoding parameters:
import com.devexpress.drawing.*;
import com.devexpress.docs.barcode.*;
import com.devexpress.system.drawing.*;
import com.devexpress.docs.Padding;
import java.io.*;
import java.nio.file.*;
public class Main {
public static void main(String[] args) throws Exception {
Code39Options options = new Code39Options();
options.setShowText(true);
options.setPadding(new Padding(10));
options.setWideNarrowRatio(3.0f);
options.setCalculateChecksum(true);
options.setWidth(600);
options.setHeight(150);
Path outputDir = Path.of("output");
Files.createDirectories(outputDir);
try (FileOutputStream fileStream = new FileOutputStream(
outputDir.resolve("code39.png").toFile());
BarcodeGenerator barcodeGenerator = new BarcodeGenerator(options)) {
barcodeGenerator.export(
"CODE-39-TEST",
fileStream,
DXImageFormat.getPng());
}
}
}
Fluent API
Use the Code39OptionsBuilder class to configure Code 39 barcode settings with the Fluent API.
The following code snippet creates a Code 39 (USD-3) barcode and customizes its encoding parameters with the Fluent API:
import com.devexpress.drawing.*;
import com.devexpress.docs.barcode.*;
import com.devexpress.system.drawing.*;
import com.devexpress.docs.Padding;
import java.io.*;
import java.nio.file.*;
public class Main {
public static void main(String[] args) throws Exception {
Code39Options options = Code39OptionsBuilder.create()
.withShowText(true)
.withPadding(new Padding(10))
.withWideNarrowRatio(3.0f)
.withCalculateChecksum(true)
.withWidth(600)
.withHeight(150)
.build();
Path outputDir = Path.of("output");
Files.createDirectories(outputDir);
try (FileOutputStream fileStream = new FileOutputStream(
outputDir.resolve("code39.png").toFile());
BarcodeGenerator barcodeGenerator = new BarcodeGenerator(options)) {
barcodeGenerator.export(
"CODE-39-TEST",
fileStream,
DXImageFormat.getPng());
}
}
}