Barcode Technology

Barcode History

Barcode Label Paper

Barcode Printer

Barcode Application

Inventory Management

AI Barcode QRCode

Barcode Scanner

Barcode Software

Barcode Software B

Barcode Software C

Barcode Software D

Barcode Software E

New Technology A

New Technology B

Robot Technology

Barcode Types

Barcode Types B

Barcode Types C

Barcode Types D

Barcode Types E

Barcode Types F

Electronic Technology

Psychology at Work

Barcode Technology and Barcode Software Related   <<< Back to Directory <<<

Code 39 Barcodes: A Technical Deep Dive Into the Iconic (Code 3 of 9) (P4)

Chapter 4: The Character Set

In the simplest possible terms, this chapter is about the alphabet of Code 39. Every language, whether spoken by humans or read by machines, has a finite set of basic building blocks. For English, it is the twenty-six letters of the alphabet. For mathematics, it is the digits and operators. For Code 39, that alphabet consists of exactly forty-three distinct characters. These are the digits zero through nine, the uppercase letters A through Z, and a small collection of special symbols: the minus sign, the period, the dollar sign, the forward slash, the plus sign, the percent sign, and the space character. That is it. No lowercase letters. No accent marks. No punctuation beyond that short list. At first glance, this might seem like a severe limitation, especially in a world where Unicode can represent the scripts of almost every human culture. But this apparent simplicity is precisely what gave Code 39 its superpower: extreme reliability in harsh industrial environments. This chapter explores not only what these forty-three characters are, but why they were chosen, how they are used in practice across many industries, and how this specific character set has shaped the way warehouses, hospitals, factories, and government agencies track their most valuable assets. We will see that the absence of lowercase letters is not a bug but a feature, and that the selection of these particular symbols was a masterclass in engineering trade-offs. By the end of this chapter, you will understand why a barcode that cannot print a simple 'e' has become one of the most successful automatic identification technologies in human history.

Before we dive into the details, here is a short summary of what this chapter covers. Code 39 encodes exactly forty-three characters, all of which are uppercase, numeric, or a selected few punctuation marks. This limited set was designed for maximum readability under imperfect printing and scanning conditions. The lack of lowercase letters reduces the risk of misreads, because similar-looking characters like 'O' and '0' or 'I' and 'l' are less confusing when only uppercase and digits are used. The special symbols, especially the dollar sign, slash, plus, and percent, are not arbitrary; they serve as 'shift' characters that allow the barcode to represent a much larger set of characters through pairing, although that extended mode is rarely used in mainstream applications. The space character, though often overlooked, is critical for human-readable interpretations and data formatting. Across different industries, this character set has proven to be both a constraint and a liberation. In automotive manufacturing, it encodes part numbers with hyphens and periods. In healthcare, it labels patient wristbands with numeric IDs and blood type letters. In logistics, it tracks packages using alphanumeric shipment numbers. In libraries, it marks book call numbers. In the military, it encodes government property tags with uppercase series and slashes. In retail, although largely replaced by UPC, it still appears on specialty items where letters are needed. Each industry has adapted to the forty-three-character alphabet, and in doing so, has discovered that you do not need every letter of every language to build a global tracking system. You just need the right forty-three.

Now let us take a closer look at the character set itself. The forty-three characters are divided into three logical groups. The first group is the ten numeric digits: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. The second group is the twenty-six uppercase letters: A through Z. The third group is the seven special symbols: hyphen, period, dollar sign, forward slash, plus sign, percent sign, and space. That gives us 10 plus 26 plus 7, which equals 43. Every Code 39 barcode begins and ends with a special start and stop character, which is conventionally represented as an asterisk. However, the asterisk is not one of the forty-three data characters; it is a unique marker that tells the scanner where the barcode begins and ends. Therefore, you will never see an asterisk encoded as data inside a Code 39 symbol. It is reserved exclusively for framing the barcode. This means that if you want to encode the letter 'A', you print the start asterisk, then the pattern for 'A', then the stop asterisk. The scanner reads the asterisks as boundaries and interprets everything in between as data.

The choice of these specific forty-three characters was not random. In the early 1970s, when David Allais and Ray Stevens of Intermec were developing Code 39, they had to make critical decisions about what to include. They were designing a barcode that could be printed with standard dot-matrix printers and read by simple laser scanners. At that time, optical character recognition was unreliable, and printing quality varied widely. The inventors realized that a barcode with too many characters would require very high printing precision, because each character would have to be distinguished from many others. Conversely, a barcode with too few characters would be useless for real-world applications that required letters and numbers. They settled on forty-three as a sweet spot. This number was large enough to cover the alphanumeric needs of most industrial applications, yet small enough that each character could be represented by a unique pattern of nine elements, with five bars and four spaces, where three of the nine elements are wide and the remaining six are narrow. This is the famous 'three of nine' encoding scheme that gives the barcode its name. The fixed ratio of wide to narrow elements makes it very robust against ink spread, paper stretch, and variations in scanning speed. Because there are only forty-three patterns to learn, the decoder firmware in a scanner can be kept simple and fast, which was essential for the microprocessors of the 1970s.

One of the most frequently asked questions about Code 39 is: why no lowercase lettersThe answer lies in the physics of scanning and the psychology of human reading. In many fonts, the lowercase 'l' looks almost identical to the uppercase 'I' and the digit '1'. Similarly, the lowercase 'o' can be confused with the digit '0'. By eliminating lowercase altogether, Code 39 avoids a whole class of potential misreads. Imagine a warehouse worker scanning a barcode that is partially smudged. If the barcode contained both upper and lower case, the scanner might have to decide whether a given bar pattern represents an 'O' or an 'o', which are encoded differently in most symbologies. But in Code 39, there is only one pattern for 'O'. That simplifies the decoding logic and reduces errors. Furthermore, in many industrial applications, case does not matter. A part number like 'A123' is functionally identical to 'a123' in a database that is case-insensitive. Therefore, the designers wisely chose to support only uppercase, knowing that databases could always convert to lowercase if needed, but the scanner could never guess a missing case distinction from a damaged barcode. This design decision has saved countless hours of troubleshooting on factory floors.

Another common question is about the special symbols. Why these seven and not othersThe hyphen and period are essential for part numbers, date codes, and version numbers. For example, a serial number like 'ABC-123-XYZ' uses hyphens to separate logical sections. A software version like 'V2.4.1' uses periods. The dollar sign, slash, plus, and percent might seem arbitrary, but they were chosen because they are commonly found on standard typewriter keyboards and can be easily printed by most impact printers. More importantly, these four symbols have a secret power: they act as 'shift' characters in an extended mode called Code 39 Full ASCII. In this mode, a pair of characters is used to represent one of the 128 ASCII characters. For instance, the pair '$A' can represent the lowercase 'a', and '$B' represents 'b', and so on. Similarly, '/A' represents '!' and '%A' represents the backspace. This extended mode allows Code 39 to encode the entire ASCII character set, including lowercase letters, punctuation, and control characters. However, this extended mode is rarely used in practice because it doubles the length of the barcode and requires special decoder logic. Most scanners and printers support it, but industry has largely ignored it because the basic forty-three characters are sufficient for 95 percent of tracking applications. The space character, which is the seventh special symbol, is often overlooked but vitally important. Without a space, you could not encode a human-readable name like 'JOHN DOE' or a multi-part identifier like 'BOX 42'. The space is encoded just like any other character, with its own unique bar-space pattern, and it is often used to separate fields in a barcode that will be parsed by a backend system.

Now that we understand what the character set is and why it was chosen, let us turn our attention to the real world. How does this limited alphabet actually perform across different industriesThe answer is surprisingly well, and the reasons are deeply connected to the technical characteristics of Code 39: its self-checking nature, its variable length, its bidirectional readability, and its tolerance for poor print quality. Each industry leverages these characteristics in slightly different ways, and the character set plays a central role in that leveraging.

Let us begin with the automotive industry, which was one of the earliest adopters of Code 39. In the 1980s, major car manufacturers in the United States and Europe started using Code 39 to track parts through assembly lines. A typical automotive part number might look like '8M5Z-2B123-A'. This string contains digits, uppercase letters, and a hyphen. All of these are native to the Code 39 character set. The hyphen is crucial because it separates the engineering revision code from the base part number. In a noisy factory environment, with oil mist, vibrating conveyor belts, and harsh lighting, the scanner needs to read barcodes that are often printed on metal tags or directly marked onto engine blocks using dot peen technology. Dot peen marking creates tiny indentations that are not perfectly sharp. A barcode symbology that required high precision, like many two-dimensional codes, would fail frequently. But Code 39, with its wide-narrow ratio, can tolerate significant distortion. The scanner looks for the ratio of wide to narrow elements, not absolute widths. As long as the wide elements are roughly two to three times wider than the narrow ones, the decoder can correctly identify the character. The limited character set also helps because there are only forty-three possible patterns, so the decoder can use a simple lookup table. In automotive assembly, speed is everything. The scanner does not have a second to hesitate. It must read the barcode in a fraction of a second as the part zooms by on a conveyor. Code 39's simple decoding algorithm, enabled by its small character set, allows for fast scanning. Furthermore, the self-checking nature of the code means that if one bar is smudged, the scanner will immediately detect an invalid pattern and reject the read, rather than outputting a wrong character. In an industry where a wrong part installed in a car could lead to a recall costing millions of dollars, this reliability is non-negotiable. The automotive industry also uses the dollar sign and slash in some proprietary part numbering systems. For example, a tag might read '123/$45' to indicate a price per unit in a foreign currency or a special production batch. Because these symbols are part of the standard set, no special encoding is required. This consistency across suppliers is a huge advantage. A parts supplier in Mexico can print a Code 39 barcode with the same characters as a supplier in Germany, and both will be readable by the same scanners on the assembly line in the United States.

Moving from the factory floor to the hospital ward, healthcare is another domain where Code 39 has found a lasting home. Patient identification wristbands are perhaps the most critical application. A typical wristband barcode might encode the patient's medical record number, which is often a purely numeric identifier, but it might also include the patient's last name and blood type, such as 'SMITH A POS'. The uppercase letters are sufficient for names, and the space is used to separate the last name from the blood type. In emergency situations, a nurse needs to scan the wristband quickly and accurately to administer medication or perform a blood transfusion. The barcode must be readable even if the wristband is wrinkled, smudged with water, or partially covered by a bandage. Code 39's robustness against printing defects is a lifesaver here. But there is another critical factor: the character set must not contain any ambiguous characters. In healthcare, confusing the letter 'O' with the digit '0' could be disastrous. A patient with blood type 'O' might receive treatment meant for a patient with blood type '0' if the scanner misreads. But in Code 39, 'O' and '0' have completely different bar-space patterns, and the decoder is designed to distinguish them strictly. There is no case sensitivity to complicate matters. The hospital's database can store the patient ID as a string that may include hyphens and periods for date-of-birth, like 'DOB 02-14-1980'. The hyphen is used as a separator, and the period is used in decimal numbers for lab results. For example, a barcode on a blood sample vial might read 'GLU 105.7'. The period is essential here to denote the decimal point. Because Code 39 includes the period natively, lab technicians can print these results directly on specimen labels without any conversion. This reduces the chance of human error when transcribing values. Moreover, many hospital information systems are legacy systems built on mainframe computers that only handle uppercase characters and a limited set of symbols. Code 39 fits perfectly into that ecosystem. It does not require the system to support lowercase or exotic punctuation, so integration is straightforward. Over the decades, the healthcare industry has tried other barcode symbologies, but Code 39 remains the gold standard for point-of-care applications because of its reliability and its character set that matches the alphanumeric needs of medical records without unnecessary complexity.

In the logistics and shipping industry, Code 39 is ubiquitous. Think of the billions of packages that travel through the networks of FedEx, UPS, and DHL. While these companies now use more sophisticated barcodes for package tracking, Code 39 is still widely used for internal routing labels, sorting machine tests, and return labels. A typical shipping label might bear a Code 39 barcode that encodes a tracking number like '1Z999AA10123456784'. This is all uppercase and digits. The tracking number is often alphanumeric specifically to allow for error detection and to pack more information into a limited space. However, the character set of Code 39 imposes a constraint: the tracking number cannot contain lowercase letters. But that is fine because the companies have designed their numbering systems to use only uppercase and digits. In fact, they deliberately avoid ambiguous characters like 'I', 'O', and 'Q' in many cases to reduce human reading errors as well. The slash symbol is used in some logistics applications to denote a container identifier, such as 'CNTR/1234/56'. The dollar sign appears in customs declarations when encoding currency amounts, e.g., 'VALUE $500'. The percent sign is less common but appears in discount or promotional tracking. One of the most important features of Code 39 for logistics is its variable length. You can encode a short string like 'BOX7' or a long string like 'SHIP-TO-STORE-ORDER-987654321'. There is no fixed length requirement, so you are not forced to pad with leading zeros. This flexibility is directly enabled by the start/stop asterisk characters, which tell the scanner where the barcode begins and ends. Without those markers, a variable-length barcode would be impossible to parse because the scanner would not know where one character ends and the next begins. The asterisk markers are the secret sauce that allows the variable length. In a busy sorting facility, packages whiz by on high-speed belts at several meters per second. The scanners are omnidirectional, meaning they can read the barcode regardless of its orientation. Code 39 is bidirectional, so a barcode that is upside down can still be read, and the decoder can determine the correct order because it recognizes the start and stop asterisks. This bidirectional property is not directly related to the character set, but the character set's simplicity ensures that the decoding logic is fast enough to keep up with the high-speed sorting. Furthermore, logistics companies often print barcodes on thermal transfer labels that are exposed to extreme temperatures, moisture, and abrasion. The wide-narrow encoding, coupled with the limited alphabet, means that even if a few bars are damaged, the scanner can often still read the barcode because the redundant wide elements provide enough context to guess the correct character. This is not magic; it is a direct consequence of having only forty-three patterns to distinguish, which allows each pattern to be maximally different from the others in terms of the positions of wide elements.

Libraries and archives represent another fascinating application of Code 39. When you borrow a book from a university library, the book's spine often bears a barcode that is used to check the item out. Many libraries adopted Code 39 in the 1990s and continue to use it today. The barcode typically encodes a book's call number or a unique accession number, such as 'QA76.73.J38'. Here we see a period, digits, and uppercase letters. The period is used to separate the classification section from the author section. In some systems, the barcode might encode the ISBN, which consists of digits and hyphens, like '0-201-63361-2'. Both the period and the hyphen are native to Code 39. The space character is used in some library systems to encode a shelf location, like 'MAIN STACKS'. The uppercase letters are perfectly adequate for author initials and subject categories. Libraries value Code 39 because it is inexpensive to print on standard label printers. The labels are often small, but because Code 39 can be printed with a relatively high density by reducing the narrow bar width, it fits neatly on a book spine. The character set does not include punctuation like comma, semicolon, or quote marks, but libraries rarely need those in a machine-readable identifier. The simplicity of the character set also makes it easy for library staff to manually type the barcode number if the scanner fails, because the human-readable text printed below the barcode is exactly the same as the encoded data. Since it only uses uppercase and common symbols, staff can quickly type it into a terminal without looking at a special keyboard. In university libraries, books from different departments all use the same Code 39 standard, so a single scanner can read any book. This interoperability is a direct outcome of the standard character set being universally adopted. There is no confusion about whether a book from the chemistry library uses a different symbol set than one from the law library. They all speak the same forty-three-character language.

The military and defense sector is another heavy user of Code 39. In many countries, military equipment and supplies are labeled with a unique identification code called the National Stock Number, or NSN. An NSN looks like '1230-00-456-7890'. It contains digits and hyphens. The hyphen is critical for separating the Federal Supply Class from the country code and the unique item number. On the battlefield, equipment must be tracked from supply depots to frontline units. The barcodes are often printed on durable tags that are attached to ammunition boxes, vehicle parts, and communication gear. These tags are exposed to sand, rain, mud, and extreme temperature swings. Code 39's tolerance for print defects is a major advantage here. The character set is also advantageous because military personnel are trained to read uppercase alphanumeric strings. There is no ambiguity between uppercase and lowercase, which is important when radioing a serial number to a logistics officer. The slash symbol is used in some military applications to denote a modification status, such as 'A-10/QA'. The dollar sign is less common but appears in procurement tags. The percent sign might appear in repair codes. The space is used to separate the unit designation from the serial number. Additionally, the military often uses Code 39 in conjunction with human-readable text that is printed below the barcode. Because the character set is simple, the human-readable text is easy to read at a glance, even by personnel who are not technically trained. The self-checking nature of Code 39 means that a battlefield scanner will not output a false reading if the barcode is partially destroyed by shrapnel; it will simply fail to read, prompting the soldier to try again or manually enter the number. This fail-safe behavior is preferred over a misread that could send a spare part to the wrong unit.

In the electronics manufacturing industry, Code 39 is used to track printed circuit boards and components during assembly. A typical PCB barcode might encode a lot number like 'PCB-REV3.1-BATCH47'. The hyphen, period, and digits are all essential. The board might go through multiple reflow ovens and washing stations, which can smear ink. Code 39's wide-narrow ratio ensures that even if the bars are slightly distorted, the scanner can still determine whether an element is wide or narrow based on relative comparison across the entire barcode. This is called a 'self-scaling' property, and it is intimately connected to the character set because the character patterns are designed to have a consistent number of wide elements (three out of nine). This consistency provides a built-in reference for the decoder to calibrate its threshold between wide and narrow. In a factory where space on the board is at a premium, the barcode may be printed very small. Code 39 can be printed with a narrow bar width as small as 0.1 millimeters, although that requires high-quality printing. The character set's limitations actually help here because the decoder does not need to distinguish between similar patterns for uppercase and lowercase, which would require finer granularity in the bar widths. By keeping the alphabet to forty-three, the inventors ensured that the minimum difference between any two patterns is one wide bar position, which is easier to detect than a subtle difference in overall width. The electronics industry also uses the plus symbol in some component identifiers to indicate a positive tolerance or a specific pin configuration, e.g., '74HC00+'. This is supported natively.

The government and public sector, including postal services and vehicle registration, also rely heavily on Code 39. In some countries, postal barcodes on envelopes use Code 39 to encode the postal code and delivery point, although other symbologies like PostNet are more common for sorting. However, for parcel tracking within the postal service, Code 39 is often used for internal routing. A postal routing barcode might read '9405 5000 1234 5678'. The space character is used to separate the four groups of digits, making it easier for human workers to visually verify the barcode. The government also uses Code 39 on vehicle registration stickers, where the license plate number is encoded as an uppercase alphanumeric string, e.g., 'ABC-1234'. The hyphen is used to separate the letter prefix from the number suffix. This allows police officers to scan the sticker with a handheld reader to check registration status quickly. The character set is perfectly suited because license plates themselves are typically alphanumeric without lowercase. Furthermore, in many government applications, the barcode must be scannable from a distance or at an angle, and Code 39's bidirectional reading capability allows officers to hold the scanner at awkward angles. The limited character set ensures that the scanner's firmware can be optimized for speed, which is crucial when an officer is in traffic and needs to get a reading in under a second.

Now let us consider a less obvious but widespread application: inventory management in retail backrooms. Although retail point-of-sale systems have largely moved to UPC and EAN codes, which are numeric only, the backroom inventory tags often use Code 39. This is because internal stock-keeping unit numbers often include letters, such as 'SHOESIZE10M' or 'COLOR-BLK'. The uppercase letters indicate product categories, and the hyphen separates attributes. Retail workers use handheld scanners to count stock and check incoming shipments. They need a barcode that can be printed on demand using a low-cost label printer, and they need it to be readable even if the label is crinkled or partially peeled. Code 39 fits the bill perfectly. The character set's inclusion of the dollar sign and percent sign is useful for marking discounted items or promotional bundles. For instance, a clearance tag might read 'SALE-20%OFF'. The percent sign is encoded directly, and the hyphen separates 'SALE' from '20%OFF'. Because the retail environment is fast-paced, any delay caused by a misread or a no-read is costly. Code 39's reliability reduces those delays. Additionally, many retail inventory systems are legacy software that only accept uppercase alphanumeric input. Code 39's character set aligns with that constraint, so no data conversion is needed between the barcode and the database query.

In the aerospace industry, safety is paramount. Every part on an aircraft must be traceable from manufacturing to installation to maintenance. Code 39 is used on tags attached to aircraft components, encoding part numbers like 'BAC-27C-345'. The hyphen and period are indispensable. The uppercase letters are standard for aerospace part numbering. The space is used to separate the manufacturer's code from the part number. The barcodes are often laser-etched onto metal surfaces, which creates a high-contrast but sometimes low-resolution mark. Code 39's simple wide-narrow encoding is well-suited for laser etching because the laser can create distinct wide and narrow voids with consistent spacing. The decoder can tolerate variations in mark depth because it looks at ratios, not absolute reflectance. The character set's small size means the lookup table for decoding can be stored in the limited memory of an embedded scanner used by mechanics. In the cockpit, some maintenance manuals have Code 39 barcodes printed next to procedures, so a mechanic can scan the barcode with a portable device to pull up detailed instructions. Those barcodes might encode a document identifier like 'MANUAL/CH4-SEC2'. The slash and hyphen are used as hierarchical separators. This application is particularly clever because it reduces the need for heavy paper manuals and ensures that the mechanic always has the latest version of the procedure, since the scanner can cross-reference the barcode with a central database.

Let us also touch on the energy sector, including oil and gas pipelines and electrical utility poles. Code 39 barcodes are affixed to pipeline valves and transformer boxes to encode asset IDs like 'VALVE-7B-09'. The hyphen and digits are used for geographic and functional identifiers. The uppercase letters indicate the type of asset. The barcodes are exposed to extreme weather and corrosive chemicals, so they are often printed on specialized polymer labels. Code 39's tolerance for damaged surfaces is a key advantage here. The limited character set also ensures that even if the label fades over time, the remaining contrast between wide and narrow bars may still be sufficient for a handheld scanner to decode. In many cases, the scanner is a ruggedized device with a laser that can read the barcode from up to several feet away. The bidirectional property allows the worker to scan the tag without having to orient the scanner perfectly, which is helpful when the tag is mounted on a round pipe. The character set's inclusion of the plus and minus signs is useful for encoding polarity or flow direction indicators, although those are less common.

In the food and beverage industry, Code 39 is used for tracking batches and expiration dates. A typical barcode might encode 'BATCH A12-EXP 2026-08-12'. The space separates 'BATCH' from the number, the hyphen separates the date components, and the uppercase letters are used for batch identifiers. While the industry also uses other symbologies like Data Matrix for small packages, Code 39 remains popular on larger shipping cartons and pallets. The barcode must be readable after being frozen or exposed to condensation. The wide-narrow encoding is robust against the blurring that can occur when moisture causes the ink to spread slightly. The decoder can still determine the wide-to-narrow ratio because it compares the widths of adjacent elements. The character set's lack of lowercase is again not a drawback because food product codes are typically designed with uppercase and digits only. The percent sign appears on discount labels for near-expiry products, e.g., 'DISCOUNT 30%'. This is encoded directly, making the label simple to print without any special mapping.

Now, let us consider the phenomenon of 'legacy lock-in.' Many industries continue to use Code 39 not because it is the most advanced symbology, but because their entire infrastructure is built around it. This includes scanners, printers, software libraries, and training manuals. The character set is so deeply ingrained that changing to another symbology would require recoding databases, retraining staff, and replacing hardware---a cost that often runs into millions of dollars. Therefore, despite the availability of two-dimensional barcodes that can encode thousands of characters, Code 39 persists. This persistence is a testament to the wisdom of the original design. The forty-three-character set was forward-looking enough to cover the vast majority of identifiers used in industry, yet conservative enough to keep the encoding simple. It did not try to do everything, so it did one thing very well: reliably encoding alphanumeric data in harsh environments.

One might ask: what about international applicationsCode 39 is used worldwide, but it does not support accented characters like e, or special letters like or . How do non-English speaking countries copeThe answer is that they either transliterate their data into uppercase ASCII or they use the extended Full ASCII mode. However, in practice, most industrial databases in Europe and Asia already use English-like part numbers and serial numbers for global interoperability. For example, a German car manufacturer might use part numbers that are entirely numeric or uppercase letters, even though their internal documentation is in German. The barcode does not need to encode the German language; it only needs to encode a part number. For customer-facing applications like loyalty cards, they might use numeric-only codes. In rare cases where a local character is absolutely necessary, they use the extended Full ASCII mode, but this is uncommon. The standard forty-three characters have become a de facto international standard for industrial identification precisely because they are language-neutral. Digits are universally understood, and uppercase letters are recognized across most Latin-based scripts. The special symbols are also part of the ASCII standard, which is supported by computers everywhere. So, the character set has achieved a level of internationalization through simplicity, not through expansion.

Another technical point worth emphasizing is the role of the checksum. Code 39 does not have a mandatory checksum character. Unlike Code 128 or the UPC family, which include a check digit to catch errors, Code 39 relies on its self-checking properties and the limited character set to ensure accuracy. This is a controversial design choice. Some industries, especially healthcare, have added a modulo 43 checksum as an optional extension. The modulo 43 checksum assigns a numeric value to each of the forty-three characters, sums them, and appends a check character. This reduces the error rate further. However, the optional checksum is not universally used, and many applications depend solely on the self-checking nature of the code. The self-checking property means that if a single bar is misread, the resulting pattern will almost certainly not correspond to any of the forty-three valid characters, so the decoder will reject the symbol and request a rescan. This is a direct consequence of having exactly three wide elements out of nine. There are many possible nine-element patterns, but only forty-three are valid. The valid patterns are chosen so that the Hamming distance between any two valid patterns is at least one wide bar position different. This makes it highly unlikely that a single printing or scanning error will transform one valid character into another valid character. In practice, this self-checking has been proven to be very effective, and the optional checksum is often omitted to keep the barcode shorter and simpler.

The human-readable interpretation is also worth discussing. Below every Code 39 barcode, the encoded data is printed in a clear, monospaced font, typically in uppercase. This allows human workers to verify the barcode visually. The character set directly affects this readability because it avoids confusing glyphs. The font used for the human-readable text often distinguishes between the digit zero and the letter O by using a slashed zero, but Code 39 itself encodes them distinctly. In the human-readable line, the start and stop asterisks are usually not printed, or they are printed at a smaller size to indicate that they are not part of the data. This convention reduces confusion. The space character is visually represented as a blank space in the human-readable text, which can be tricky if the barcode has leading or trailing spaces, but most applications avoid those. The hyphen and period are clearly distinguishable, and the dollar sign, slash, plus, and percent are printed as their standard ASCII glyphs. Because the character set is limited, the human-readable text is always unambiguous, which is not the case with some other barcodes that allow control characters or extended ASCII.

Let us now examine how the character set influences the physical length of the barcode. Code 39 is a linear barcode, and each character is represented by nine elements. On average, each character consumes about 0.15 to 0.3 inches of horizontal space, depending on the chosen module width. Therefore, a string of twenty characters will produce a barcode about three to six inches long. This is manageable for most labels. However, if you were to encode lowercase letters using the Full ASCII mode, each lowercase character would require two Code 39 characters, doubling the length. That is a powerful disincentive to use lowercase, so most applications stick with the basic forty-three characters to keep labels compact. In industries where label space is limited, such as on small electronic components, the compactness of the basic character set is a significant advantage. The variable length also means that you can choose to encode shorter IDs for smaller labels, and longer IDs for shipping cartons where space is abundant. The character set's fixed nine-element structure ensures that the length calculation is straightforward, which helps in label design.

Another aspect is the scanner's ability to decode partial or truncated barcodes. Because the start and stop asterisks are distinct characters, the scanner can identify the barcode even if the label is torn at one edge. As long as one of the asterisks and most of the data are visible, the scanner can still decode the data and infer the missing part if the data length is known. This is particularly important in industries like mining and construction, where labels are subject to abrasion. The limited character set ensures that even a partial pattern can be matched against a small lookup table, increasing the probability of a successful read. In contrast, a symbology with a larger character set would have more possible patterns, making partial decoding more ambiguous.

Let us also think about the cost of implementation. The forty-three-character set means that printers do not need to store complex font tables. A simple lookup table of forty-three bar-space patterns is sufficient. This reduces the memory requirements of label printers, which in the early days had very limited storage. Even today, this simplicity translates to faster printing speeds because the printer can generate the barcode pattern without complex calculations. The character set also simplifies the software libraries used to generate Code 39 barcodes. A programmer can implement a Code 39 encoder in a few dozen lines of code. This ease of implementation has contributed to the symbology's widespread adoption. There are open-source libraries available for almost every programming language, and they all rely on the same forty-three-character table. This uniformity ensures that any software can generate a Code 39 barcode that any scanner can read, provided the same module width and ratio are used.

Now, consider the future. With the rise of Internet of Things (IoT) and RFID tags, will Code 39 and its forty-three-character set become obsoleteThe answer is no, at least not for the foreseeable future. Barcodes are passive, require no battery, and can be printed at virtually zero cost per label. RFID tags are more expensive and require specialized readers. For many applications, especially one-time use labels like shipping labels or patient wristbands, the cost of a printed barcode is unbeatable. Code 39's character set is part of its economic advantage. Because it is simple, the printing and reading hardware are inexpensive. The forty-three characters are sufficient for the vast majority of tracking scenarios. Industries are not demanding lowercase letters; they are demanding reliability, and Code 39 delivers that. We might see a gradual shift to two-dimensional codes like QR or Data Matrix in some areas, but those require higher printing resolution and more sophisticated scanners. For basic alphanumeric tracking, Code 39 remains the workhorse. The character set has stood the test of time for over half a century, and that is unlikely to change quickly.

To summarize the technical characteristics in relation to the character set, let us list the key points. First, the limited size of the alphabet allows for a simple encoding scheme with three wide elements out of nine, which is self-checking and tolerant of printing variations. Second, the absence of lowercase eliminates a major source of misreads between visually similar characters. Third, the inclusion of seven special symbols covers the most common separators and modifiers used in industrial part numbers, dates, and identifiers. Fourth, the start and stop asterisks are not data characters but provide framing that enables variable length and bidirectional scanning. Fifth, the optional checksum is based on the forty-three-character set, providing an extra layer of error detection when required, but the self-checking nature often makes it unnecessary. Sixth, the character set is fully ASCII-based, ensuring compatibility with virtually all computer systems and databases worldwide. Seventh, the simplicity of the character set leads to lower hardware and software costs, faster scanning, and easier implementation. These technical characteristics have directly influenced the applications we discussed. In automotive, the reliability and speed are paramount. In healthcare, the unambiguous distinction between letters and digits is critical. In logistics, the variable length and bidirectional reading are key. In libraries and government, the interoperability and low cost are attractive. In aerospace and energy, the tolerance for harsh environments is essential. In retail and food, the compactness and ease of printing are valued. Each industry has adapted its own data formats to fit within the forty-three-character alphabet, and in doing so, has benefited from the robustness and simplicity that Code 39 provides.

Let us now revisit the opening question: why only forty-three charactersThe answer is that the designers prioritized reliability over expressiveness. They understood that a barcode is a machine-readable language, not a human-readable one. The machine does not care about aesthetics or grammatical case. It cares about unambiguous symbols that can be scanned quickly and accurately. The forty-three characters were chosen because they represent the intersection of common industrial needs and optical constraints. They are the minimal set that allows most part numbers, serial numbers, and identifiers to be encoded without resorting to complex encodings. They are the sweet spot between too few characters, which would force users to adopt cumbersome coding schemes, and too many characters, which would reduce the tolerance for printing defects. The inventors' foresight has been validated by decades of real-world use. The character set has become so entrenched that it is now a standard defined by ISO/IEC 16388, ensuring that any compliant scanner can read any compliant Code 39 label, regardless of where it was produced.

We should also address a common misconception: Code 39 cannot encode the asterisk as data. Because the asterisk is the start and stop character, it is reserved. If you need to represent an asterisk in your data, you must either use the extended Full ASCII mode, where '/V' represents an asterisk, or you must redesign your data format to avoid using asterisks. In practice, this is rarely a problem because most identifiers do not need asterisks. The hyphen, period, dollar, slash, plus, and percent are sufficient for almost all separators and modifiers. The space is used for word separation. If you find yourself needing an asterisk, you are probably designing a human-readable label and you can place the asterisk in the human-readable text without encoding it in the barcode. This distinction is important for label designers to understand.

Another nuance: the character set is case-insensitive by design. When you encode an uppercase 'A', you cannot encode a lowercase 'a' in the basic mode. If your database stores 'a' and 'A' as different values, you will have a problem. However, almost all industrial databases are case-insensitive or they convert everything to uppercase before storing. Therefore, this is rarely an issue. If you absolutely need case sensitivity, you can use the Full ASCII extension, but as we mentioned, that doubles the length and is generally avoided. For the purpose of this chapter, it is sufficient to know that the basic character set is uppercase only, and that is by design, not by accident.

Let us also reflect on the space character. Encoding a space in a barcode is sometimes tricky because human readers might ignore trailing spaces. In Code 39, the space is a real character with its own pattern. This means that a barcode encoding 'A B' (with a single space) is different from 'AB'. The scanner will decode the space and include it in the data string. This is important for applications where spaces are meaningful, such as in names or multi-field identifiers. However, many label printers will trim trailing spaces by default, so you have to be careful when designing the data string. In practice, spaces are used sparingly because they increase the length of the barcode and are not visually obvious. They are most often used to separate a prefix from a suffix, as in 'BATCH 123'. In those cases, the space is clearly visible in the human-readable text, which helps workers understand the data structure.

Now, consider the plus and minus signs. In many manufacturing contexts, the plus sign indicates a positive tolerance, e.g., 'TOL+0.01'. The minus sign indicates negative tolerance or a dash. Code 39 supports both, but interestingly, the hyphen is also used as a dash. So you have both a hyphen and a minus signActually, they are the same character in ASCII. Code 39's hyphen is the standard hyphen-minus character. So it serves double duty as both a separator and a negative sign. This is consistent with most text encodings. The dollar sign is used for currency, but also as a shift character in the extended mode. The slash is used for fractions, dates (like 12/31/2023), or as a separator in hierarchical codes. The percent sign is used for percentages and also as a shift character. This dual use of dollar, slash, plus, and percent as both data symbols and shift indicators is a clever piece of design. In the basic mode, they are just symbols. In the extended mode, they combine with letters to represent the full ASCII set. This means that even though the basic character set is only forty-three, the overall system can be expanded when needed. This expandability is a testament to the forward-thinking design of Code 39.

To wrap up this detailed exploration, let us provide a comprehensive summary of the chapter. Code 39 encodes a character set of exactly forty-three symbols: ten digits, twenty-six uppercase letters, and seven special symbols (hyphen, period, dollar sign, slash, plus, percent, and space). This set is intentionally limited to maximize readability, reduce decoding errors, and allow for simple, robust encoding with three wide elements per character. The absence of lowercase letters is a deliberate choice to avoid confusion between similar glyphs and to keep the decoder logic simple. The special symbols are carefully selected to cover common separators and modifiers used in industrial part numbers, serial numbers, dates, and currencies. The start and stop asterisk characters are not part of the data set but are essential for framing variable-length barcodes and enabling bidirectional scanning. The character set directly influences the technical performance of Code 39: its self-checking capability, tolerance for printing defects, variable length, low implementation cost, and high scanning speed. These technical characteristics, in turn, determine the suitability of Code 39 for various industries. In automotive manufacturing, the character set supports part numbers with hyphens and periods, while the robustness ensures reliable reads on oily or vibrating parts. In healthcare, the unambiguous distinction between 'O' and '0' prevents life-threatening errors, and the space and period allow for clear patient identifiers and lab values. In logistics, the variable length and bidirectional reading enable high-speed sorting of alphanumeric tracking numbers. In libraries, the hyphen and period are used for call numbers, and the simplicity of the character set makes it easy to print and manually type. In the military, the hyphen and slash encode National Stock Numbers and modification statuses, and the tolerance for damage ensures readability in harsh field conditions. In electronics, the plus and hyphen encode component tolerances and revisions, while the small character set allows for very compact barcodes on circuit boards. In retail backrooms, the percent and dollar signs are used for discounts and prices, and the space separates product attributes. In aerospace, the period and hyphen are used for part numbers, and the laser-etching compatibility is enhanced by the simple wide-narrow patterns. In energy and public sector applications, the same principles apply: reliability, simplicity, and interoperability. The character set is also internationally viable because it is based on ASCII and does not rely on language-specific letters. The optional modulo 43 checksum, while not mandatory, is based on the forty-three-character set and provides additional error detection. The extended Full ASCII mode allows the representation of all 128 ASCII characters, including lowercase and punctuation, by pairing the special symbols with letters, but this mode is rarely used because it doubles the barcode length and is unnecessary for most applications. In summary, the forty-three-character set of Code 39 is not a limitation but a carefully engineered compromise that has enabled decades of reliable, cost-effective, and universally accepted automatic identification across a vast array of industries. Its legacy continues to grow because it solves the fundamental problem of tracking physical objects in an imperfect world, using the simplest possible alphabet that gets the job done. The next time you see a Code 39 barcode on a hospital wristband, a shipping label, a car part, or a library book, you will know that those forty-three characters are the silent heroes that keep our modern world organized and safe.

 

EasierSoft Barcode Label Design & Bulk Printing Software

---- Use Excel Data to Batch Print Barcodes on Label Sheets or Roll Labels  

---- How to use this barcode software

Download:  Free Barcode Software + Barcode Label Designer

Download Free Barcode Software at Softonic

     Download at CNET

Once you obtain a GS1/UPC/EAN barcode, or other barcode type and QR code, you can use our free software to batch print barcode labels onto Roll label paper using a professional label printer, or to batch print barcodes onto Avery 5160 label sheets using a regular laser or inkjet printer. Our software has free and paid versions.

The free version fully meets your needs for batch printing GS1/UPC/EAN barcodes. The paid version can import data from Excel and databases to batch print barcode labels with different values.

How to Start

Input Data

Import Excel Data

Print Barcode

Barcode Format

Label Designer

All Screen Shot

Export Barcode Image

Save Template

Output Word Excel

How to Use & FAQ:

Example: Print barcodes to 5167 label

Example: Print barcodes to 5168 label

Example: Print portrait orientation 5168

Example: Print barcodes to 5169 label

Example: Print barcodes to 5660 label

Example: Print barcodes to 5661 label

Example: Print barcodes to 5662 label

Example: Print barcodes to 5663 label

Example: Print barcodes to 5664 label

Example: Print portrait orientation 5664

Example: Print barcodes to 5873 label

Example: Print barcodes to 5874 label

Two ways to import Excel data

Import Excel Data - Pro Edition

Import Excel Data - Std Edition

Import Data from Excel - Detail

Load Data From Excel File

Data Editing Table

Copy Data From Excel

Four ways to input barcode data

Add ASCII Key E

Input Multiple Lines of Text for Barcodes

Generates Sequential Serial Numbers

Import or copy data from Excel sheets

Special sequence number generation

Std Details: Simple Input Form

Std Details: Multiple Line Text Input

Details: Sequence Barcode Generator

Examples: Sequence Barcode Generator

Import Data From Excel Spreadsheet

Barcode Data Correspondence Diagram

Data Editor

Editing a Single Row Data in Form

Batch Editing Multiple Rows of Data

Batch Data Editing - Example 2

Design & print complex barcode labels

Configuring Text Elements on Label

Configuring Barcode Elements on Label

Configuring Image Elements on Label

Setting Line Elements on Label

Designing Labels for 5164 Sheet

Advanced Page Layout Settings

Add Barcode Elements to a Label

Configuring Parameters of a Barcode

Entering Multiple Values for a Barcode

Print barcode labels

Print bulk barcodes - How to start

Four sections of print bulk barcodes

Barcode Filter & Repeat Print Quantity

Print on part of the page

Highlights

Excel integration: Import data directly from Excel to generate and print barcodes in bulk.

Label designer: Create complex labels with multiple barcodes, text, logos, and shapes.

Batch printing: Print thousands of barcodes at once using standard inkjet/laser printers or professional barcode printers.


Flexible editions:

Standard Edition: Simple batch printing with Excel data.

Professional Edition: Adds command-line automation for workflow integration.

Label Designer Edition: Advanced design features for complex labels.


Why Choose Our Barcode Solutions?

Cost-effective: Free online generator and permanent free desktop version available.

Easy to use: No technical expertise required—just input data and print.

Versatile: Supports nearly all 1D and 2D barcode types, including QR codes.

Trusted: Recommended by CNET and widely downloaded by users worldwide.


Suitable Use Cases

Small businesses and startups needing quick barcode labels for products.

Retailers and online sellers managing inventory with batch barcode printing.

Manufacturers requiring sequential or custom barcode labels for packaging.

Educational and testing environments where barcodes are used for tracking.

 

 

CONTACT

cs@easiersoft.com

If you have any question, please feel free to email us.

 

https://free-barcode.com

 

<<< Back to Directory <<<     Barcode Generator     Barcode Freeware     Privacy Policy