MaxiCode FAQ & Tutorial
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
Approximately 74 characters may be encoded in this mode.
- 6 = Reader Program allows scanner manufacturers to program
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%.
Font at 6 Points*
The printed size of the
Font may vary slightly depending on the printer and labels used.
IDAutomation recommends printing the MaxiCode Font at 300 DPI or greater.
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
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
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
and EOT is
In all IDAutomation MaxiCode products, when the DataToEncode begins
with [)>~, the Country, ServiceClass and ZipCode properties are automatically
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
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
<IMG height=110 width=110 src="http://localhost:8080/examples/servlet/MaxicodeServlet?
MaxiCode Font and Encoder may be used to print MaxiCode as a font.
Additionally, many IDAutomation
support MaxiCode in 2D versions of the software, including the
Barcode Label Software
Pro, Image Generator,
ActiveX Barcode Control,
.NET Windows Forms
Server Control and the
Java Barcode Product.
When creating MaxiCode symbols, the output should be always be
checked for encoded data verification,
symbol quality and the
The most common
method of decoding MaxiCode is with a camera-based
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
is easily obtained.
Focus Scanner (or the IDAutomation 2D Scanner with
Control + ASCII Mode enabled) may be used to view the non-printable
RS, GS and EOT lower
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
Decoded data from the
Scanner ASCII String Decoder:
The quality of printed symbols may be verified with the Print Quality
Assessment utility found in the
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 <<
MAXICODE: Mode 2
X roughly = 0.023"
[A] < Data Safety Margin = 100%
[A] < Horizontal Print Growth = +13% of X
[A] < Vertical Print Growth = +18% of X
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
Back to Top