Code 128
- 2 minutes to read
Code 128 is a high-density, variable-length linear barcode symbology designed for efficient encoding of alphanumeric data. It is widely used in logistics, shipping, and inventory systems because it can encode large amounts of information in a compact space.
A key feature of Code 128 is its built-in checksum, which enables error detection and improves data integrity. The symbology also supports multiple character sets (A, B, and C).

Refer to the following page for additional information: https://en.wikipedia.org/wiki/Code_128
Configure Code 128 Settings
Use the Code128Options class to configure Code 128 barcode settings.
| Method | Description |
|---|---|
| setCharset(Code128CharacterSet value) | Sets the Code 128 character set (A, B, or C) for encoding. |
| setAddLeadingZero(boolean value) | Specifies whether to prepend a leading for numeric data in Code Set C (CHARSET_C) to ensure proper encoding alignment. |
| setFNC1Substitute(String value) | Specifies a placeholder string for the FNC1 function character. |
| setFNC2Substitute(String value) | Specifies a placeholder string for the FNC2 function character. |
| setFNC3Substitute(String value) | Specifies a placeholder string for the FNC3 function character. |
| setFNC4Substitute(String value) | Specifies a placeholder string for the FNC4 function character. |
The following code snippet creates a Code 128 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 {
Code128Options options = new Code128Options();
options.setCharset(Code128CharacterSet.CHARSET_B);
options.setAddLeadingZero(true);
options.setFNC1Substitute("<FNC1>");
options.setFNC2Substitute("<FNC2>");
options.setFNC3Substitute("<FNC3>");
options.setShowText(true);
return options;
Path outputDir = Path.of("output");
Files.createDirectories(outputDir);
try (FileOutputStream fileStream = new FileOutputStream(
outputDir.resolve("code128.png").toFile());
BarcodeGenerator barcodeGenerator = new BarcodeGenerator(options)) {
barcodeGenerator.export(
"ORD-4589-US-25A",
fileStream,
DXImageFormat.getPng());
}
}
}
Fluent API
Use the Code128OptionsBuilder class to configure Code 128 barcode settings with the Fluent API.
The following code snippet creates a Code 128 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 {
Code128Options options = Code128OptionsBuilder.create()
.withCharset(Code128CharacterSet.CHARSET_B)
.withAddLeadingZero(true)
.withFNC1Substitute("<FNC1>")
.withFNC2Substitute("<FNC2>")
.withFNC3Substitute("<FNC3>")
.withShowText(true)
.build();
Path outputDir = Path.of("output");
Files.createDirectories(outputDir);
try (FileOutputStream fileStream = new FileOutputStream(
outputDir.resolve("code128.png").toFile());
BarcodeGenerator barcodeGenerator = new BarcodeGenerator(options)) {
barcodeGenerator.export(
"ORD-4589-US-25A",
fileStream,
DXImageFormat.getPng());
}
}
}