Code 128 Barcodes: History, Purpose, Advantages, Limitations, Applications - ByteScout
  • Home
  • /
  • Blog
  • /
  • Code 128 Barcodes: History, Purpose, Advantages, Limitations, Applications

Code 128 Barcodes: History, Purpose, Advantages, Limitations, Applications

  1. Code 128
  2. History
  3. Structure
  4. Purpose
  5. Advantages
  6. Limitations
  7. Applications
  8. Conclusion

Code 128

Code 128 is another linear barcode which is widely used in industry and stores due to its dynamism and complexity, representing both alphabetic and numeric characters without sacrificing barcode density. Ted Williams is credited with the invention.


Computer Identics, in the year 1981, designed a barcode type denser than previously used code 39. The barcode type could encode all the 128 ASCII characters. It is for this reason this barcode type is called code 128.

Shortly after, GS1-128 was created. The name shows that Code 128 barcodes conform to the GS1 standards. Such barcodes include FNC1 characters, application identifiers, check digits and extra spaces, and parentheses in the human-readable interpretation characters. GS1-128 is formerly known as UCC/EAN-128.

These GS1 standards are to improve the efficiency, safety, and visibility of supply chains across physical and digital channels in various sectors. They form business semantics that identifies, capture, and share critical information about products, locations, assets, and more.


Individually, every aspect has three bars and three spaces of varying widths. Code 128 has 106 different printed characters having primarily three different meanings.  For instance, different start characters inform the reader which of the character sets is originally in use while three-shift codes permit changing character sets inside a symbol. Specifically, there are 103 data symbols, three start symbols, and two stop symbols. Code 128 has six sections:

  • 2 quiet zones
  • Start character
  • Encoded data
  • Check character
  • Stop character

Code 128 includes an obligatory check digit that is based on the modulo 103 algorithm. The check digit appears just before the stop character, which has no human readable interpretation for the check digit. The check symbol is calculated from a weighted sum of all the symbols.

The elemental composition of GS1-128 includes a Code 128, used as the barcode, an application identifier, which is followed by the data. Each data set is linked if more than one data set needs representation. GS1-128 can be distinguished from CODE 128, by having a function following the start code, CODE-A to C.

Code 128 is denser than the other linear barcode type i-e code 39. Code 128 can encode all the upper and lower case alphabets and all the numeric characters from 0-9 and all the 128 ASCII characters. The higher density of code 128 makes it suitable to store a large amount of data as compared to code 139.

This variety of characters has been categorized into three sub-groups or sub-sets.  Group or subset A contains all the ASCII characters, uppercase characters, digits, and control codes. Subset B contains ASCII characters, upper and lower case characters and digits while subset C contains numeric data. This versatility of code 128 is the key to its wide-scale use.


The purpose of code 128 was to design such a barcode type which could encode large amounts of linear data in a compact form. Previously, code 39 was used to code data but that barcode type was not suitable for encoding a large amount of data due to its low density, and in order to encode large data the length of the barcode had to be increased which was not a convenient solution. Hence researchers designed code 128 which was more dense and compact and could store large data.


  • Requires 6 elements to encode a character, 3 bars and 3 spaces which make it compact and concise storing a large amount of data in small barcode unlike code 39 which required 9 elements to encode a character
  • Can encode all the ASCII characters (including all special characters) without cumbersome procedures unlike code 39 which could encode only six special characters.
  • It provides more security over encoded data and minimized chances of error while scanning.
  • Uses the least amount of label space for messages of six or more characters with high message integrity.


  • It has four different widths variation for each encoded character. It is not easy to print a barcode with four different width variations per element.
  • More advanced scanning devices are required to scan these bar codes unlike code 39 which could be scanned with any general scanning device.
  • Like other linear barcodes (Code39, EAN13, EAN8, I2of5, UPCA, UPCE, Codabar, GS1 Databar, GS1 128), code 128 is also subjected to distortions and can be damaged easily.
  • Code 128 utilizes 4 types of bar size, therefore printers with high print quality are required. CODE 128 is not suitable for printing with either dot matrix printers or ink-jet printers and for flexographic printing on corrugated cardboard.


Code 128 is used extensively worldwide like its subset GS1-128. It plays a primary role in supply chains and inventory in different industries due to the ability to store highly diversified information. This data can include the manufacturing date of the product, open date, weight and etc. Found listed below are some of the applications of the code:

  • Commonly used in the shipping industry to identify containers and items.
  • Used in the packaging and wholesale industry to identify and label a variety of wholesale items. For instance, companies like FedEx use Code 128 barcodes on packing slips to automate delivery and tracking.
  • Used widely in the healthcare, drugs, and medical equipment industry. For example, it is used to label blood transfusion products such as marking the Donor Identification Number.
  • Used in industries such as apparel, food process, and medical instruments industry.
  • Used in the logistics and transportation industries for order and distribution.
  • Widely used in combination with code 39 in all the advanced brick and mortar companies.


If you want a linear barcode with a complete range of Alphabets, Numeric, and ASCII characters, code 128 is the best option. It is compact, concise, and can handle a large amount of data. When code 128 is compared with other barcodes such as code 39, the result is that code 128 is more succinct and space-efficient while it also provides its users with greater levels of data security.

Bytescout has two products that deal with Code 128.  ByteScout BarCode Generator is capable of generating Code 128 barcodes from your desktop and web applications and BarCode Reader SDK  reads Code 128 barcodes from scanned images, photo pictures, and PDF files.


About the Author

ByteScout Team ByteScout Team of Writers ByteScout has a team of professional writers proficient in different technical topics. We select the best writers to cover interesting and trending topics for our readers. We love developers and we hope our articles help you learn about programming and programmers.