Understanding Code 128 barcode
Barcodes are the backbone of modern data capture systems. Among them, Code 128 stands out for its high data density, full ASCII support, and wide range of applications. Whether you're managing inventory, printing shipping labels, or tracking assets, Code 128 provides the flexibility and precision required for professional use.
Below is an image of Code 128 C:
1. What is Code 128?
Code 128 is a high-density linear (1D) barcode symbology developed by Computer Identics in 1981. It is capable of encoding the entire ASCII character set (0–127), including numeric digits, uppercase and lowercase letters, punctuation marks, and control codes.
The name "128" comes from the fact that it supports 128 unique character values, making it more versatile than older standards like Code 39 or EAN-13.
2. Characteristics of Code 128
Feature | Description |
---|---|
Character Set | Full ASCII (0–127) |
Code Sets | A, B, and C for different character groupings |
Density | High — suitable for compact labels with long data strings |
Start/Stop Symbols | Yes — each barcode starts and ends with special symbols |
Checksum | Mandatory modulo-103 checksum |
Length | Variable — can encode short or long data strings |
Switching | Can shift or switch between code sets for optimal encoding efficiency |
3. Code Sets
- Code Set A: Uppercase letters, control characters, numbers
- Code Set B: Upper/lowercase letters, numbers, symbols
- Code Set C: Pairs of numeric digits (00–99), most compact
4. Application of Code 128
Due to its versatility, Code 128 is used across many industries:
Industry | Application Example |
---|---|
Logistics | Shipping labels (e.g., GS1-128) |
Retail | Internal product labels, shelf management |
Manufacturing | Serial numbers, batch IDs, quality control |
Healthcare | Sample tracking, patient identification |
Libraries | Book and media labeling |
Printing | Barcode printers for warehouse systems |
Its compact size and large character set make it ideal for applications requiring dense, multi-character data encoding.
5. Structure of Code 128
A complete Code 128 barcode consists of the following parts:
[ Quiet Zone ] + [ Start Symbol ] + [ Encoded Data ] + [ Checksum ] + [ Stop Symbol ] + [ Quiet Zone ]
Components:
- Quiet Zone: A blank margin before and after the barcode (min. 10x the narrowest bar width)
- Start Symbol: One of three characters (Start A, Start B, Start C) indicates the initial code set
- Encoded Data: The character data encoded using one or more code sets
- Checksum: A modulo-103 calculation ensures data accuracy
- Stop Symbol: A special end character that terminates the barcode
- Final Quiet Zone
6. Encoding Rule of Code 128
Code 128 uses bar and space patterns made up of 11 modules per character. Each character corresponds to a numeric code value between 0 and 102.
Key Rules:
- Encoding starts with a Start Code (value 103–105).
- Encoded characters are selected from a lookup table based on the current code set.
- Code sets can switch or shift mid-barcode for optimized encoding.
- The checksum is calculated after encoding data but before the stop character.
Code Set Optimization:
- For purely numeric strings, Code Set C is best, as it encodes two digits in one symbol.
- For alphanumeric strings, Code Set B is typically used.
- Special shift/switch characters allow transitioning between code sets.
7. How to Calculate Checksum of Code 128
Code 128 encoding table:
ID | Code128A | Code128B | Code128C | Bar & Space Structure | Encoding Value |
---|---|---|---|---|---|
0 | SP | SP | 0 | 212222 | bbsbbssbbss |
1 | ! | ! | 1 | 222122 | bbssbbsbbss |
2 | “ | “ | 2 | 222221 | bbssbbssbbs |
3 | # | # | 3 | 121223 | bssbssbbsss |
4 | $ | $ | 4 | 121322 | bssbsssbbss |
5 | % | % | 5 | 131222 | bsssbssbbss |
6 | & | & | 6 | 122213 | bssbbssbsss |
7 | ‘ | ‘ | 7 | 122312 | bssbbsssbss |
8 | ( | ( | 8 | 132212 | bsssbbssbss |
9 | ) | ) | 9 | 221213 | bbssbssbsss |
10 | * | * | 10 | 221312 | bbssbsssbss |
11 | + | + | 11 | 231212 | bbsssbssbss |
12 | , | , | 12 | 112232 | bsbbssbbbss |
13 | - | - | 13 | 122132 | bssbbsbbbss |
14 | . | . | 14 | 122231 | bssbbssbbbs |
15 | / | / | 15 | 113222 | bsbbbssbbss |
16 | 0 | 0 | 16 | 123122 | bssbbbsbbss |
17 | 1 | 1 | 17 | 123221 | bssbbbssbbs |
18 | 2 | 2 | 18 | 223211 | bbssbbbssbs |
19 | 3 | 3 | 19 | 221132 | bbssbsbbbss |
20 | 4 | 4 | 20 | 221231 | bbssbssbbbs |
21 | 5 | 5 | 21 | 213212 | bbsbbbssbss |
22 | 6 | 6 | 22 | 223112 | bbssbbbsbss |
23 | 7 | 7 | 23 | 312131 | bbbsbbsbbbs |
24 | 8 | 8 | 24 | 311222 | bbbsbssbbss |
25 | 9 | 9 | 25 | 321122 | bbbssbsbbss |
26 | : | : | 26 | 321221 | bbbssbssbbs |
27 | ; | ; | 27 | 312212 | bbbsbbssbss |
28 | < | < | 28 | 322112 | bbbssbbsbss |
29 | = | = | 29 | 322211 | bbbssbbssbs |
30 | > | > | 30 | 212123 | bbsbbsbbsss |
31 | ? | ? | 31 | 212321 | bbsbbsssbbs |
32 | @ | @ | 32 | 232121 | bbsssbbsbbs |
33 | A | A | 33 | 111323 | bsbsssbbsss |
34 | B | B | 34 | 131123 | bsssbsbbsss |
35 | C | C | 35 | 131321 | bsssbsssbbs |
36 | D | D | 36 | 112313 | bsbbsssbsss |
37 | E | E | 37 | 132113 | bsssbbsbsss |
38 | F | F | 38 | 132311 | bsssbbsssbs |
39 | G | G | 39 | 211313 | bbsbsssbsss |
40 | H | H | 40 | 231113 | bbsssbsbsss |
41 | I | I | 41 | 231311 | bbsssbsssbs |
42 | J | J | 42 | 112133 | bsbbsbbbsss |
43 | K | K | 43 | 112331 | bsbbsssbbbs |
44 | L | L | 44 | 132131 | bsssbbsbbbs |
45 | M | M | 45 | 113123 | bsbbbsbbsss |
46 | N | N | 46 | 113321 | bsbbbsssbbs |
47 | O | O | 47 | 133121 | bsssbbbsbbs |
48 | P | P | 48 | 313121 | bbbsbbbsbbs |
49 | Q | Q | 49 | 211331 | bbsbsssbbbs |
50 | R | R | 50 | 231131 | bbsssbsbbbs |
51 | S | S | 51 | 213113 | bbsbbbsbsss |
52 | T | T | 52 | 213311 | bbsbbbsssbs |
53 | U | U | 53 | 213131 | bbsbbbsbbbs |
54 | V | V | 54 | 311123 | bbbsbsbbsss |
55 | W | W | 55 | 311321 | bbbsbsssbbs |
56 | X | X | 56 | 331121 | bbbsssbsbbs |
57 | Y | Y | 57 | 312113 | bbbsbbsbsss |
58 | Z | Z | 58 | 312311 | bbbsbbsssbs |
59 | [ | [ | 59 | 332111 | bbbsssbbsbs |
60 | \ | \ | 60 | 314111 | bbbsbbbbsbs |
61 | ] | ] | 61 | 221411 | bbssbssssbs |
62 | ^ | ^ | 62 | 431111 | bbbbsssbsbs |
63 | _ | _ | 63 | 111224 | bsbssbbssss |
64 | NUL | 64 | 111422 | bsbssssbbss | |
65 | SOH | a | 65 | 121124 | bssbsbbssss |
66 | STX | b | 66 | 121421 | bssbssssbbs |
67 | ETX | c | 67 | 141122 | bssssbsbbss |
68 | EOT | d | 68 | 141221 | bssssbssbbs |
69 | ENQ | e | 69 | 112214 | bsbbssbssss |
70 | ACK | f | 70 | 112412 | bsbbssssbss |
71 | BEL | g | 71 | 122114 | bssbbsbssss |
72 | BS | h | 72 | 122411 | bssbbssssbs |
73 | HT | i | 73 | 142112 | bssssbbsbss |
74 | LF | j | 74 | 142211 | bssssbbssbs |
75 | VT | k | 75 | 241211 | bbssssbssbs |
76 | FF | I | 76 | 221114 | bbssbsbssss |
77 | CR | m | 77 | 413111 | bbbbsbbsbs |
78 | SO | n | 78 | 241112 | bbssssbsbss |
79 | SI | o | 79 | 134111 | bsssbbbbsbs |
80 | DLE | p | 80 | 111242 | bsbssbbbbss |
81 | DC1 | q | 81 | 121142 | bssbsbbbbss |
82 | DC2 | r | 82 | 121241 | bssbssbbbbs |
83 | DC3 | s | 83 | 114212 | bsbbbbssbss |
84 | DC4 | t | 84 | 124112 | bssbbbbsbss |
85 | NAK | u | 85 | 124211 | bssbbbbssbs |
86 | SYN | v | 86 | 411212 | bbbbsbssbss |
87 | ETB | w | 87 | 421112 | bbbbssbsbss |
88 | CAN | x | 88 | 421211 | bbbbssbssbs |
89 | EM | y | 89 | 212141 | bbsbbsbbbbs |
90 | SUB | z | 90 | 214121 | bbsbbbbsbbs |
91 | ESC | { | 91 | 412121 | bbbbsbbsbbs |
92 | FS | | | 92 | 111143 | bsbsbbbbsss |
93 | GS | } | 93 | 111341 | bsbsssbbbbs |
94 | RS | ~ | 94 | 131141 | bsssbsbbbbs |
95 | US | DEL | 95 | 114113 | bsbbbbsbsss |
96 | FNC3 | FNC3 | 96 | 114311 | bsbbbbsssbs |
97 | FNC2 | FNC2 | 97 | 411113 | bbbbbsbsbsss |
98 | SHIFT | SHIFT | 98 | 411311 | bbbbsbsssbs |
99 | CODEC | CODEC | 99 | 113141 | bsbbbsbbbbs |
100 | CODEB | FNC4 | CODEB | 114131 | bsbbbbsbbbs |
101 | FNC4 | CODEA | CODEA | 311141 | bbbsbsbbbbs |
102 | FNC1 | FNC1 | FNC1 | 411131 | bbbbsbbsbbbs |
103 | StartA | StartA | StartA | 211412 | bbsbssssbss |
104 | StartB | StartB | StartB | 211214 | bbsbssbssss |
105 | StartC | StartC | StartC | 211232 | bbsbssbbbss |
106 | Stop | Stop | Stop | 2331112 | bbsssbbbsbsbb |
Code 128 includes a mandatory checksum character to ensure the barcode is correctly scanned.
Checksum Calculation Steps:
(1) Assign a numeric value to the Start Code:
- Start A = 103
- Start B = 104
- Start C = 105
(2) Add the weighted sum:
- First data character is weighted by 1
- Second by 2, third by 3, etc.
(3) Formula:
Checksum = (Start Value + Σ(Character Value × Position Index)) mod 103
(4) Find the checksum symbol that corresponds to this value in the Code 128 table.
Example: Encoding "ABC" using Code Set B
- Start Code B = 104
- A = 33, B = 34, C = 35
Checksum = 104 + (33×1) + (34×2) + (35×3) = 104 + 33 + 68 + 105 = 310 => 310 mod 103 = 1
The checksum character corresponds to value 1 in the Code 128 table.
Conclusion
Code 128 is a powerful and flexible 1D barcode symbology capable of encoding a wide range of data in a compact form. With its support for full ASCII, high-density encoding, and reliable checksum validation, it remains one of the most widely used barcodes in enterprise, logistics, and industrial applications.
Whether you are labeling products or tracking shipments, Code 128 offers the precision and flexibility modern systems demand.