| Home: Products: Barcode FAQ and Tutorial: Code-128 Bar Code FAQ & Tutorial: |
Code 128 Barcode FAQ & Tutorial
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
About the Code 128 Barcode Symbology |
The Code 128 barcode is a high-density linear symbology that encodes text, numbers, numerous functions and the entire 128 ASCII character set (from ASCII 0 to ASCII 128.) It is commonly used for several implementations; and is also referred to as ISBT-128, GS1-128, UCC-128, EAN-128 and USS Code 128.
Code 128 contains 106 different printed barcode patterns. Each printed barcode may have one of three different meanings depending upon which of the character sets are being used, with the availability of three different Code 128 start characters to program the initial character set. Functions are also provided in the barcode symbology to switch between character sets and encode Application Identifiers. The Code 128 barcode may be complex to use because of the different character sets, which is the primary reason IDAutomation provides the Code 128 auto function, "Code128( )", in several of the Font Tools, Components and Applications.
The complete Code 128 barcode consists of a start character, data digits, a modulo 103 check digit and a stop character.
| Start Character | Data Digits | Check Character | Stop Character |
| Ì | CODE-128 | O | Î |
|
|
|||
The above Code 128 barcode symbol was created with the IDAutomation Barcode Image Generator.
|
Various Standards for the Code 128 Barcode Symbology |
Several standards exist that dictate how Code 128 barcodes should be generated for certain implementations; a few of these include:
|
Products for Printing Code 128 Barcodes |
Several Barcode Integration Guides are available that suggest various barcode printing options. These integration options should be examined to determine whether to use barcode components, applications or fonts for the printing of barcodes. A few of the Barcode Integration Guides offered include the following:
Featured Product:
The IDAutomation Universal Barcode Font Advantage Package is a unique product that excels at generating barcode 128 on multiple operating systems and locales, including Double Byte versions of Windows. This package overcomes the obstacles that sometimes occur when printing Code 128 as a barcode font outside of the Unites States.
|
Reading & Scanning Code 128 Barcodes |
The most common method of reading code 128 barcodes is with a linear barcode scanner. Most of the barcode scanners recommended by IDAutomation perform keyboard emulation and receive power from the USB port, so no external power supply is required. When a barcode is scanned using keyboard emulation, the data scanned appears at the cursor as if it had been typed from the keyboard.
Most barcode scanners have the ability to read Code 128 barcodes by default, such as the IDAutomation SC5 USB Barcode Scanner. This scanner dependably reads the IDAutomation Code 128 Barcode Font and Universal Barcode Font when printed as small as 6 points, which is an X dimension of 4 mils.
|
Creating GS1-128 (UCC/EAN 128) Compliant Barcodes |
Notice: GS1 recently renamed several barcode standards built on Code 128 such as EAN-128 and UCC-128 to GS1-128. The name change does not change the barcode standards; therefore, documentation referring to EAN-128 and UCC-128 is the same as GS1-128. GS1 also recently renamed the RSS Symbology to GS1 DataBar to avoid confusion with RSS feed technology.
The Code 128 barcode symbology is used to create GS1-128 (formerly UCC128 or EAN128) barcodes such as the GS1-128 symbols and data structure for SSCC18 and SCC14. When using the Code 128 font to create a GS1-128 barcode, every barcode must begin with a Start C character followed by a (FNC1) "function code one" and an Application Identifier (AI) number directly after each FNC1. Additional FNC1 codes may be applied to a barcode to encode additional information. Below are some of the requirements for GS1-128 and how to implement them.
Fig. 1: Examples of Encoding GS1-128 (UCC/EAN-128) with IDAutomation Products
|
|
| SSCC-18 Barcode | |
| Desired result: | [FNC1]0000801234999999999[MOD10] |
| Text string sent to DataToEncode parameter: | ~2120000801234999999999~m17 |
| Human readable text: | (00) 008012349999999997 |
| Data scanned from barcode:* | ]C100008012349999999997 |
| GS1 Shipping Code (SCC-14), EAN 14 and Global Trade Item Number (GTIN) | |
| Desired result: | [FNC1]013001234567890[MOD10] |
| Text string sent to DataToEncode: | ~212013001234567890~m13 |
| Human readable text: | (01) 30012345678906 |
| Data scanned from barcode:* | ]C10130012345678906 |
Additional Examples:
| Coupon Extended Code (Offer Code and Expiration Date) | |
| Desired result: | [FNC1]81010123450901 |
| DataToEncode: | ~21481010123450901 |
| Human readable Text: | (8101) 0123450901 |
| Coupon Extended Code (Offer Code and Household ID) | |
| Desired result: | [FNC1]8100712345[FNC1]2112345678 |
| DataToEncode: | ~2148100712345~2122112345678 |
| Human readable text: | (8100) 712345 (21) 12345678 |
| EAN-128 Barcode Including Article Number, Best Before Date and Batch Number | |
| Desired result: | [FNC1]0119421123450011[FNC1]15991231[FNC1]10101234 |
| DataToEncode: | ~2120119421123450011~21215991231~21210101234 |
| Human readable text: | (01) 19421123450011 (15) 991231 (10) 101234 |
| Shipment Identification Number | |
| Desired result: | [FNC1]40212345678901234560 |
| DataToEncode: | ~21240212345678901234560 |
| Human readable text: | (402) 12345678901234560 |
* Many barcode scanners do not decode FNC1 codes. However, when the "format" option of the IDAutomation SC5USB Barcode Scanner is set to "UCC/EAN-128," FNC1 codes are decoded as ]C1 for the first FNC1 and ASCII 29 (The [GS] character) for additional FNC1 codes as required by GS1.
|
Decoding and Reading GS1-128 (UCC/EAN128) FNC Barcodes |
Most scanners with built-in decoders do not decode FNC1 codes in GS1-128 (UCC/EAN-128) barcodes. However, when the "format" option of the IDAutomation SC5USB Barcode Scanner is set to "UCC/EAN-128," the scanner decodes FNC1 codes according to the UCC/EAN Application Identifier Standard. According to this standard, the first FNC1 should be translated to the three text characters of ]C1, and next FNC1 codes should be translated to a field separator ASCII code 29 (The [GS] character) as demonstrated in Fig. 2.
Fig. 2: Decoding FNC-1 Codes with the IDAutomation SC5 USB Barcode Scanner
| String used to create the barcode using IDAutomation products: Ê8100712345Ê2112345678 | |||
Barcode Created:![]() |
|||
| Decoded result from the IDAutomation SC5 USB Scanner: | |||
| ]C1 | 8100712345 | [GS]* | 2112345678 |
* The [GS] character is the group separator,
which is ASCII
29. This character cannot be viewed or printed and therefore it may not
appear to be present. If the
SC5 USB Barcode
Scanner is being used, the GS character can be reassigned to any ASCII
character by changing the "field separator code" referred to in the manual.
This may be changed to the "|" character to make troubleshooting easier.
After making that change, the scanner would decode the symbol in
Fig. 2 as follows:
]C18100712345|2112345678.
|
USPS EAN128 Barcodes |
The United States Postal Service (USPS) uses Code 128 barcodes for many special services such as delivery confirmation; which is formatted as follows:
The start, stop and mod 103 check digits are automatically added in all of IDAutomation barcode products. To create the required Code128 barcode, use Code 128 Auto with ApplyTilde enabled and add in the appropriate ASCII 202 and AI’s (as documented in the GS1-128 (EAN/UCC 128) information section of this FAQ). A MOD 10 Check Digit is also required at the end of the data encoded. This may be easily generated in IDAutomation products with the ~m command as demonstrated in Fig 3.
When printed at 16 points, the IDAutomationC128L font will produce the exact dimensions for GS1-128 (UCC/EAN Code128) required by the USPS special services, which is a height of .75" and an X dimension of .013". For more information, refer to the USPS specifications. More information about formatting GS1-128 barcodes with IDAutomation products is provided in the GS1-128 section of this FAQ.
Fig. 3: Example of Encoding USPS Barcodes
In the example below, the ASCII 202 character (Ê) may be used in place of ~??? for products that do not support ApplyTilde.
| USPS Compliant GS1-128 (UCC/EAN) for Special Services | |
| Desired result: | [FNC1]420 12345[FNC1]91 01 123456789 12345678[MOD10] |
| Text string sent to DataToEncode: | ~21342012345~212910112345678912345678~m29 |
| Human readable text (not generated automatically): | (420) 12345 (91) 01123456789123456789 |
| Data scanned from barcode:* | ]C1420123459101123456789123456789 |
* USPS Characters Below the Barcode
The human-readable characters below the barcode may be easily generated
with IDAutomation products by utilizing the SpliceText option with the Sans
Serif Bold or equivalent type font.
In the event the human-readable characters below the barcode need to
be created from code, the Sans Serif Bold font should be used and spaces
should be inserted between every 4 digits. The following Visual Basic VBA
code accomplishes this purpose:
Mid(DataToEncode, 1, 4) & " " & Mid(DataToEncode,
5, 4) & " " & Mid(DataToEncode, 9, 4) & " " & Mid(DataToEncode, 13, 4) &
" " & Mid(DataToEncode, 17, 4) & " " & Mid(DataToEncode, 21, 2)
Several other combinations are possible. For more information, refer to the USPS barcode specifications. The USPS has also standardized a newer 4-state barcode type defined as the Intelligent Mail Barcode, which encodes delivery and tracking information in a single symbol.
|
The USS Code-128 Character Set |
| IDAutomation provides several font tools, macros and source code samples that may be used royalty-free with IDAutomation barcode fonts, which automatically format the data being encoded to the barcode fonts. Therefore, references to this character set may not be necessary. |
The three character sets listed below are for the Code 128 barcode. In the columns A, B and C, are listed the character or function the barcode scanner will read for the associated symbol. The "ASCII" and "Unicode" columns designate the location where the barcode symbol for the character resides. The column "Char" lists the character that resides at the ASCII location, which is used to print the corresponding symbol. The ASCII location for the space character, stop character and character values 94-105 are applicable only to IDAutomation products including the Code 128 Barcode Fonts. The ISO specification for Code 128 does not specify the location of ASCII and Unicode values for these symbols.
| Code A | Code B | Code C | ASCII * | Unicode * | Char | Value | Code A | Code B | Code C | ASCII * | Unicode * | Char | Value |
| Space | Space | 00 | 0194 | 00C2 | Â | 00 | V | V | 54 | 0086 | 0056 | V | 54 |
| ! | ! | 01 | 0033 | 0021 | ! | 01 | W | W | 55 | 0087 | 0057 | W | 55 |
| " | " | 02 | 0034 | 0022 | " | 02 | X | X | 56 | 0088 | 0058 | X | 56 |
| # | # | 03 | 0035 | 0023 | # | 03 | Y | Y | 57 | 0089 | 0059 | Y | 57 |
| $ | $ | 04 | 0036 | 0024 | $ | 04 | Z | Z | 58 | 0090 | 005A | Z | 58 |
| % | % | 05 | 0037 | 0025 | % | 05 | [ | [ | 59 | 0091 | 005B | [ | 59 |
| & | & | 06 | 0038 | 0026 | & | 06 | \ | \ | 60 | 0092 | 005C | \ | 60 |
| ' | ' | 07 | 0039 | 0027 | ' | 07 | ] | ] | 61 | 0093 | 005D | ] | 61 |
| ( | ( | 08 | 0040 | 0028 | ( | 08 | ^ | ^ | 62 | 0094 | 005E | ^ | 62 |
| ) | ) | 09 | 0041 | 0029 | ) | 09 | _ | _ | 63 | 0095 | 005F | _ | 63 |
| * | * | 10 | 0042 | 002A | * | 10 | nul | ` | 64 | 0096 | 0060 | ` | 64 |
| + | + | 11 | 0043 | 002B | + | 11 | soh | a | 65 | 0097 | 0061 | a | 65 |
| , | , | 12 | 0044 | 002C | , | 12 | stx | b | 66 | 0098 | 0062 | b | 66 |
| - | - | 13 | 0045 | 002D | - | 13 | etx | c | 67 | 0099 | 0063 | c | 67 |
| . | . | 14 | 0046 | 002E | . | 14 | eot | d | 68 | 0100 | 0064 | d | 68 |
| / | / | 15 | 0047 | 002F | / | 15 | eno | e | 69 | 0101 | 0065 | e | 69 |
| 0 | 0 | 16 | 0048 | 0030 | 0 | 16 | ack | f | 70 | 0102 | 0066 | f | 70 |
| 1 | 1 | 17 | 0049 | 0031 | 1 | 17 | bel | g | 71 | 0103 | 0067 | g | 71 |
| 2 | 2 | 18 | 0050 | 0032 | 2 | 18 | bs | h | 72 | 0104 | 0068 | h | 72 |
| 3 | 3 | 19 | 0051 | 0033 | 3 | 19 | ht | i | 73 | 0105 | 0069 | i | 73 |
| 4 | 4 | 20 | 0052 | 0034 | 4 | 20 | lf | j | 74 | 0106 | 006A | j | 74 |
| 5 | 5 | 21 | 0053 | 0035 | 5 | 21 | vt | k | 75 | 0107 | 006B | k | 75 |
| 6 | 6 | 22 | 0054 | 0036 | 6 | 22 | ff | l | 76 | 0108 | 006C | l | 76 |
| 7 | 7 | 23 | 0055 | 0037 | 7 | 23 | cr | m | 77 | 0109 | 006D | m | 77 |
| 8 | 8 | 24 | 0056 | 0038 | 8 | 24 | s0 | n | 78 | 0110 | 006E | n | 78 |
| 9 | 9 | 25 | 0057 | 0039 | 9 | 25 | s1 | o | 79 | 0111 | 006F | o | 79 |
| : | : | 26 | 0058 | 003A | : | 26 | dle | p | 80 | 0112 | 0070 | p | 80 |
| ; | ; | 27 | 0059 | 003B | ; | 27 | dc1 | q | 81 | 0113 | 0071 | q | 81 |
| < | < | 28 | 0060 | 003C | < | 28 | dc2 | r | 82 | 0114 | 0072 | r | 82 |
| = | = | 29 | 0061 | 003D | = | 29 | dc3 | s | 83 | 0115 | 0073 | s | 83 |
| > | > | 30 | 0062 | 003E | > | 30 | dc4 | t | 84 | 0116 | 0074 | t | 84 |
| ? | ? | 31 | 0063 | 003F | ? | 31 | nak | u | 85 | 0117 | 0075 | u | 85 |
| @ | @ | 32 | 0064 | 0040 | @ | 32 | syn | v | 86 | 0118 | 0076 | v | 86 |
| A | A | 33 | 0065 | 0041 | A | 33 | etb | w | 87 | 0119 | 0077 | w | 87 |
| B | B | 34 | 0066 | 0042 | B | 34 | can | x | 88 | 0120 | 0078 | x | 88 |
| C | C | 35 | 0067 | 0043 | C | 35 | em | y | 89 | 0121 | 0079 | y | 89 |
| D | D | 36 | 0068 | 0044 | D | 36 | sub | z | 90 | 0122 | 007A | z | 90 |
| E | E | 37 | 0069 | 0045 | E | 37 | esc | { | 91 | 0123 | 007B | { | 91 |
| F | F | 38 | 0070 | 0046 | F | 38 | fs | | | 92 | 0124 | 007C | | | 92 |
| G | G | 39 | 0071 | 0047 | G | 39 | gs | } | 93 | 0125 | 007D | } | 93 |
| H | H | 40 | 0072 | 0048 | H | 40 | rs | ~ | 94 | 0126 | 007E | ~ | 94 |
| I | I | 41 | 0073 | 0049 | I | 41 | us | del | 95 | 0195 | 00C3 | Ã | 95 |
| J | J | 42 | 0074 | 004A | J | 42 | fnc 3 | fnc 3 | 96 | 0196 | 00C4 | Ä | 96 |
| K | K | 43 | 0075 | 004B | K | 43 | fnc 2 | fnc2 | 97 | 0197 | 00C5 | Å | 97 |
| L | L | 44 | 0076 | 004C | L | 44 | Shift | Shift | 98 | 0198 | 00C6 | Æ | 98 |
| M | M | 45 | 0077 | 004D | M | 45 | code C | code C | 99 | 0199 | 00C7 | Ç | 99 |
| N | N | 46 | 0078 | 004E | N | 46 | code B | fnc 4 | code B | 0200 | 00C8 | È | 100 |
| O | O | 47 | 0079 | 004F | O | 47 | fnc 4 | code A | code A | 0201 | 00C9 | É | 101 |
| P | P | 48 | 0080 | 0050 | P | 48 | fnc 1 | fnc 1 | fnc 1 | 0202 | 00CA | Ê | 102 |
| Q | Q | 49 | 0081 | 0051 | Q | 49 | Start A | Start A | Start A | 0203 | 00CB | Ë | 103 |
| R | R | 50 | 0082 | 0052 | R | 50 | Start B | Start B | Start B | 0204 | 00CC | Ì | 104 |
| S | S | 51 | 0083 | 0053 | S | 51 | Start C | Start C | Start C | 0205 | 00CD | Í | 105 |
| T | T | 52 | 0084 | 0054 | T | 52 | Stop | Stop | Stop | 0206 | 00CE | Î | na |
| U | U | 53 | 0085 | 0055 | U | 53 |
* It is necessary to print the Code 128 space character from ASCII 194 instead of ASCII 32 because some applications do not print a symbol instead of a space character. The ASCII location for the space character, stop character and character values 94-105 are applicable only to IDAutomation barcode products including the Barcode 128 Fonts. Additionally, the characters listed for values 00 and 94-105 are from the Latin-1 codepage. When the Latin-1 codepage is not being used, or when using a Macintosh, it is suggested to use the Universal Barcode Font Advantage™, which creates Code 128 barcodes as a font in any codepage and operating system.
|
Code 128 Check Character Calculation Examples |
IDAutomation provides several font tools, plug-ins and source code samples that are free to use with IDAutomation barcode fonts, which will automatically format the start, stop and check characters to the barcode fonts. Therefore, the manual calculations described here are rarely necessary.
The following examples create a barcode with the IDAutomation Code 128 Barcode Fonts in the Latin-1 codepage, which is the default setting in the USA. When the Latin-1 codepage is not being used, or when using a Macintosh, it is suggested to use the Universal Barcode Font Advantage™, which creates the Code 128 barcode as a font in any codepage and operating system.
The following process is used to determine the value of the check character:
Calculation Example for Character Set A or B:
The following table is an example of how to obtain the check character for the data "biz" using Code 128 character set B.
| Start B | b | i | z | STOP | |
| weighting | 1 | 2 | 3 | ||
| values | 104 | 66 | 73 | 90 | |
| totals | 104 | 66 | 146 | 270 |
To print the data "biz" as a barcode, the text of ÌbizgÎ is combined with the Code 128 Barcode Fonts.
Calculation Example for Character Set C:
The following table is an example of how to obtain the check character for the number "667390" using character set C.
| Start C | 66 | 73 | 90 | STOP | |
| weighting | 1 | 2 | 3 | ||
| values | 105 | 66 | 73 | 90 | |
| totals | 105 | 66 | 146 | 270 |
To print the data "667390" as a barcode, the text of ÍbizhÎ is combined with the Code 128 Barcode Fonts.
Calculation Example for Multiple Character Sets:
The following table is an example of how to encode the data "biz" using Code 128 character set B with a switch to character set A for a carriage return function.
| Start B | b | i | z | É | m | STOP | |
| weighting | 1 | 2 | 3 | 4 | 5 | ||
| values | 104 | 66 | 73 | 90 | 101 | 77 | |
| totals | 104 | 66 | 146 | 270 | 404 | 385 |
|
Switching Between Sets and Encoding Functions |
Encoding functions such as returns and tabs may make data entry tasks easier. Functions are easily encoded with the appropriate ASCII function code.
Functions may be directly encoded in IDAutomation products by enabling
"ApplyTilde"
in Code128 Auto, and using the format ~???
to specify the ASCII
code of the function. For example, Code~009Bar~013
will encode
Code[TAB]Bar[RETURN].
When
ApplyTilde is not available, the programming code syntax for the
ASCII function code
may be used in the formula for the DataToEncode. For example, the following
formulas combine two fields in a single barcode with a tab function separator:
Crystal Reports: IDAutomation_Code128 ({Table1.DataField1}
& Chr(9) & {Table1.C128})
Microsoft Access: =( [Table1.Field1] & Chr(9)
& [Table1.Field2] )
VB .NET: DataToEncode =DataString1 &
Chr(9) & DataString2
Java: DataToEncode =DataString1 + (char)9
+ DataString2;
Caution should be used in character set A because any lowercase letter
will create a function according to the chart.
Use the letter "i" for a tab and "m" for a return. Other functions may be
determined by looking up the column for Code A in the
character set chart. For example, the following
character string in character set A encodes the data "JOHN[tab]SMITH[tab]128-288-6794[return]":
JOHNiSMITHi128-288-6794m
If assistance is needed, please contact IDAutomation.
|
|
|
Product Quick Links: [Barcode Fonts | Font Tools | Components | Label Software | Scanners | Printers | RFID | Product Index] |
Copyright
© 2000-2008 IDAutomation.com, Inc.
Legal Notices.
GS1 and DataBar are trademarks of GS1; gs1.org.
|
Over 70% of Fortune 100 companies use IDAutomation's products to automate their businesses. |