Skip to main content

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).

Code 128, DevExpress Barcode Generation API for Java

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());
        }
    }
}
See Also