MaxiCode 2D Barcode Tutorial

Barcode Information | Tutorials | FAQs at

About the MaxiCode Barcode SymbologyExample of a Maxicode barcode symbol formatted for UPS

Maxicode is an international 2D (two-dimensional) barcode that is currently used by UPS on shipping labels for world-wide addressing and package sortation. MaxiCode symbols are fixed in size and are made up of offset rows of hexagonal modules arranged around a unique finder pattern. MaxiCode includes error correction, which enables the symbol to be decoded when it is slightly damaged.

MaxiCode symbols encode two messages; a primary message and a secondary message. The primary message usually encodes the postal code, country code and the class of service number. The secondary message usually encodes address data, but can encode other types of information as well.

MaxiCode barcodes have different modes of operation. IDAutomation MaxiCode products support the following modes:

  • 2 = US Carrier with postal codes up to 9 digits in length. Approximately 93 characters may be encoded in this mode.
  • 3 = International Carrier with alpha-numeric postal codes up to 6 digits in length.
    Approximately 93 characters may be encoded in this mode.
  • 4 = Standard Symbol encodes general information for purposes other than the shipping industry.
    Approximately 90 characters may be encoded in this mode.
  • 5 = Secure Symbol encodes general information with more error correction.
    Approximately 74 characters may be encoded in this mode.
  • 6 = Reader Program allows scanner manufacturers to program barcode readers.

Symbol Size & Tolerance

The size and tolerance range of the MaxiCode symbol is noted below in millimeters. The sizes listed include the required quiet zone of one white hexagon on each side of the symbol, referred to as 1x. The allowable tolerance from the nominal size is approximately 5%.

Nominal Minimum Maximum IDAutomation MaxiCode Font at 6 Points*
Width 28.14mm 26.48mm 29.79mm 28.10mm
Height 26.91mm 25.32mm 28.49mm 26.70mm
Bullseye 07.74mm 07.35mm 08.16mm 07.72mm

The printed size of the IDAutomation MaxiCode Font may vary slightly depending on the printer and labels used. IDAutomation recommends printing the MaxiCode Font at 300 DPI or greater.

Encoding MaxiCode Symbols for UPS

Structuring MaxiCode barcode symbols for UPS shipping labels is a complex task. The information and code provided here are only examples. For more information about structuring messages to meet UPS specifications, contact the local UPS office and ask for their Guide to Labeling. All IDAutomation MaxiCode products encode data accurately according to the AIM USS MaxiCode specification. However, it is up the implementer to structure the symbol properly. In addition to the normal method of encoding mentioned here, UPS customers may wish to use Compressed MaxiCode. IDAutomation MaxiCode products are compatible with Compressed MaxiCode, however, they do not perform the compression. If compressed MaxiCode is to be used, the data must be compressed before it is encoded in the symbol. This is usually accomplished with a DLL supplied by UPS.

UPS has defined a unique process of encoding data in MaxiCode barcodes, which includes a postal code, service class, country code and delimiter characters.

All IDAutomation Maxicode products include the ApplyTilde feature, which allows an easy method of structuring RS, GS and EOT delimiter characters in the symbol. When the data encoded begins with [)>RS01GS as required by UPS, the Country, ServiceClass and ZipCode are automatically populated and the following format is expected: [)>RS01GSYearPostalCodeGSCountryGSServiceGSmessage…

For example, the source code below creates an acceptable string where: 96 is a two digit year that is placed before the zip code, 336260000 is the zip code, 840 is the country code, 001 is the service code, and the rest of the string is the data formatted for UPS specifications.

RS, GS and EOT cannot be viewed because they are non-printable characters, therefore, the Encoded Data should always be verified when symbols are created for UPS.

NOTE: The code supplied below is just an example and may not meet current specifications. For more information on structuring messages to meet UPS specifications, please contact your local UPS office. In the examples below, RS is ASCII 30, GS is ASCII 29 and EOT is ASCII 4. In all IDAutomation MaxiCode products, when the DataToEncode begins with [)>~, the Country, ServiceClass and ZipCode properties are automatically populated.

Java Example:
char GS = (char)29;
char RS = (char)30;
char EOT = (char)4;
rm.setData("[)>"+RS+ "01"+GS+ "96336091062"+GS+ "840"+GS+ "002"+GS+"1Z14647438"
Visual Basic Example:
Dim NewMessage As String
Dim GS As String
Dim RS As String
Dim EOT As String
GS = Chr(29)
RS = Chr(30)
EOT = Chr(4)
NewMessage = "[)>" + RS + "01" + GS + "96336091062" + GS + "840" + GS + "002" + GS +
"1Z14647438" + GS + "UPSN" + GS + "410E1W" + GS + "195" + GS + GS + "1/1" + GS + GS +
"Y" + GS + "135Lightner" + GS + "TAMPA" + GS + "FL" + RS + EOT
MaxiCode1.DataToEncode = NewMessage
Tilde Processing of Delimiter Characters

IDAutomation MaxiCode products support the format ~??? to specify the ASCII code of the character to be encoded. This allows the encoding of GS, RS and EOT from the command line. For example, the following data:

“[)>”+RS+ “01”+GS+ “96336091062”+GS+ “840”+GS+ “002”+GS+ “1Z14647438″+GS+”UPSN”+GS+”410E1W”+GS+”195″+GS+GS+”1/1″+GS+GS+”Y”+GS+

May be encoded with this string:
Encoded Data Verification should be performed to ensure proper encoding.

It is often necessary to use this feature when using the Java Servlet or the ASP Barcode Server for IIS. These products may be used to dynamically generate a Maxicode barcode image as a URL that may be specified in an IMG tag (as demonstrated in the code below) or viewed in a Crystal Report or FileMaker Report.

<IMG height=110 width=110 src=”https://localhost:8080/examples/servlet/MaxicodeServlet?DATA=[)>~03001~02996336091062~029840~029002~0291Z14647438~029UPSN~029410E1W~029195~029~0291/1~029~029Y~029135Reo~029TAMPA~029FL~030~004″>

Printing & Generating

The IDAutomation MaxiCode Font and Encoder may be used to print MaxiCode as a font. Additionally, many IDAutomation Barcode Components and Applications support MaxiCode in 2D versions of the software, including the Barcode Label Software Pro, Image Generator, ActiveX Barcode Control, .NET Windows Forms Control, ASP.NET Server Control and the Java Barcode Product.

When creating MaxiCode symbols, the output should always be checked for encoded data verification, symbol quality and the bullseye size.

Reading MaxiCode Barcodes

The most common method of decoding MaxiCode is with a camera-based imager. IDAutomation recommends many barcode imagers that perform keyboard emulation and receive power from the USB port, so no external power supply is needed. When a barcode symbol is read using keyboard emulation, decoded text appears at the cursor as if it had been typed from the keyboard and application integration is easily obtained.

Verifying Maxicode Symbols

Encoded Data Verification:

The IDAutomation SC7USB 2D Imager, with Control + ASCII Mode enabled, may be used to view the non-printable RS, GS and EOT lower ASCII functions with the free Barcode Scanner ASCII Decoder application. To perform the verification, simply open the application and scan a MaxiCode symbol.

Fig 1.
MaxiCode test symbol, resulting decoded data and application screen-shot.
Example of a Maxicode barcode symbol formatted for UPS






Decoded data from the Free Barcode Scanner ASCII String Decoder:


ASCII Decoder screenshot

Symbol Quality:

The quality of printed symbols may be verified with the Print Quality Assessment utility found in the IDAutomation 2D Barcode Scanner. The test will show the data encoded, grade the symbol and report the encoding mode. If this scanner is also used for encoded data verification, Control + ASCII Mode must be enabled.

The report below was generated when scanning a MaxiCode barcode symbol with PQA enabled:

>> PQA <<
X roughly = 0.023"
[A] < Data Safety Margin = 100%
[A] < Horizontal Print Growth = +13% of X
[A] < Vertical Print Growth = +18% of X
Bullseye Size:

When creating MaxiCode symbols with graphic products, the DPI or Resolution property should be set to closely match the resolution of the printer and the distance the inner dots are from the outer circle of the bullseye according to the Symbol Size and Tolerance chart. Some of the inner dots should be very close to the bullseye, so that they are almost touching it. If they are not, increase or lower the DPI or Resolution property slightly until the symbol looks correct. This rare issue may occur because some combinations of printers and resolutions calculate and round down the size of the bullseye.