SUMMARY | Code 39, born in 1974, is the barcode that proved alphanumeric codes could work reliably on factory floors and hospital wristbands. Its self-checking nature, variable length, and ability to encode letters, numbers, and seven special symbols made it the workhorse of early automatic identification. This article explores its technical traits - wide-to-narrow ratio, asterisk start/stop markers, optional check digit, and quiet zone requirements - and shows, through real-world cases in automotive, healthcare, logistics, defense, library, and energy sectors, exactly how these traits either enable or constrain each application. We will see why Code 39 persists in 2026 alongside newer 2D codes, and why it is neither obsolete nor universally suitable. | 
| Chapter 1: Introduction to Code 39 | In 1974, the same year that the first UPC scan occurred in a Ohio supermarket, a different barcode was taking shape for a far less glamorous world: the factory floor, the warehouse dock, and the military supply depot. That barcode was Code 39, also known as Code 3 of 9. Unlike UPC, which encodes only numeric digits and requires a fixed length, Code 39 was designed from the outset to handle the full uppercase English alphabet, the digits zero through nine, and a handful of punctuation marks. That decision made it an instant bridge between the human-readable part number and the machine-readable world. | The name 'Code 3 of 9' comes from a simple counting rule: in its standard encoding, each character is represented by nine elements - five bars and four spaces - and exactly three of those nine elements are wide. The remaining six are narrow. This three-out-of-nine pattern gives the code its name and also its most critical technical property: self-checking. Because every character must contain exactly three wide elements, a mis-decoded character will almost certainly violate that rule, and the scanner can immediately reject it without needing a separate check digit. That does not mean check digits are never used; they are optional, and we will discuss when and why they are added. | The original motivation for Code 39 came from Intermec Corporation, specifically from engineers David Allais and Ray Stevens. They needed a symbology that could be printed with standard impact printers and dot-matrix technology, which were common in industrial settings at the time. They also needed it to be easy to read with the relatively primitive laser scanners of the 1970s. Their solution was brilliantly simple: encode each character as a sequence of bars and spaces, with wide elements representing binary ones and narrow elements representing binary zeros, but with a twist - the wide elements could be printed at any ratio between 2.0 and 3.0 times the narrow width, giving tremendous tolerance to printing imperfections. That tolerance is the main reason Code 39 survived the transition from dot-matrix printers to thermal transfer, from helium-neon lasers to CCD imagers, and from paper labels to direct part marking. | The structure of a Code 39 symbol is deceptively straightforward. Every valid Code 39 barcode begins and ends with an asterisk character, which serves as the start and stop marker. That asterisk is never used as data; it is strictly a framing symbol. Inside those two asterisks, the encoder places the actual data characters, each separated by a narrow inter-character gap called the intercharacter space. Unlike many later symbologies, Code 39 does not use a built-in check character unless the application demands it. This means the same data can appear in two different lengths - one without a check digit, and one with an optional modulo 43 check digit appended to the end. The decision to include that check digit is not made by the barcode itself, but by the industry standard or the system integrator. | One of the most distinctive technical traits of Code 39 is its variable length. You can encode one character or fifty characters in a single symbol, limited only by the physical space available on the label and the scanner's field of view. This flexibility is both a blessing and a curse. It is a blessing because you are not forced to pad short part numbers with leading zeros, as you are in UPC. It is a curse because variable length makes it harder for scanners to know when they have read the complete message, especially if the quiet zone - the blank margin on either side - is not large enough. The quiet zone is specified as at least ten times the narrow bar width, which for many industrial labels means at least a quarter of an inch. In practice, many applications enlarge that to half an inch to avoid misreads. | The encoding process itself is a fascinating exercise in binary pattern design. Each character's nine elements are divided into five bars (vertical dark lines) and four spaces (vertical light gaps). Wide bars and wide spaces are each about two to three times the width of narrow ones. The scanner measures the relative widths of all nine elements, determines which are wide and which are narrow, and then maps that pattern to a character table. The table includes 43 characters: A-Z, 0-9, dash, period, space, dollar sign, slash, plus sign, and percent sign. The asterisk is the 44th but is reserved for framing. That limited character set is one of Code 39's most important constraints - it cannot handle lowercase letters directly, nor can it encode most modern special characters like underscores or brackets. To encode lowercase, you would need to use Code 39's 'full ASCII' mode, which uses two-character combinations to represent the 128 ASCII characters, but that mode is rarely used because it doubles the length of the barcode. | 
| Now, you might ask: why does this 1970s technology still appear on hospital wristbands, automotive parts, and military equipment in 2026The answer lies in a combination of technical robustness, installed base, and regulatory inertia. The U.S. Department of Defense, for example, mandated Code 39 for logistics labels under the MIL-STD-1189 standard (later replaced by MIL-STD-129) and that standard persisted for decades. Many automotive suppliers adopted Code 39 because their customers' legacy systems could not read anything else. And in healthcare, the symbology's self-checking nature and ability to encode letters like 'A' and 'B' for blood types made it a natural fit for patient identification before the widespread adoption of GS1 DataMatrix. | But Code 39 is not without its faults. Its density is poor compared to Code 128 or even Interleaved 2 of 5. A typical Code 39 symbol requires about 15 times the narrow bar width per character, meaning a 10-character part number might be two or three inches long at a moderate print resolution. That low density forces label designers to use larger labels or print at higher dots-per-inch, which increases cost. Additionally, the variable length and optional check digit create ambiguity: two different systems might scan the same physical barcode and interpret it differently if one expects a check digit and the other does not. That is why most modern applications either fix the length or mandate the check digit. | Despite these shortcomings, Code 39 occupies a unique position in the barcode ecosystem. It is not the most efficient, not the most secure, and certainly not the most compact. But it is the most widely understood alphanumeric symbology in the world. Every professional barcode scanner sold today can read Code 39 out of the box, often with no configuration needed. That universal compatibility is its enduring superpower. | In the following chapters, we will walk through the technical features of Code 39 in detail, then visit eight diverse industries to see how those features play out in practice. We will see how the wide-to-narrow ratio affects readability on corrugated cardboard, how the quiet zone determines whether a wristband scans correctly, and how the optional check digit prevents medication errors in hospitals. By the end, you will understand not just how Code 39 works, but why it persists in a world increasingly dominated by QR codes and DataMatrix. The goal is not to persuade you to adopt Code 39 for your next project - in many cases, you should not. The goal is to give you a clear, practical framework for deciding when Code 39 is the right tool, and when it is time to move on. | 
| Chapter 2: Anatomy of a Code 39 Symbol - Bars, Spaces, and the Asterisk | To understand why Code 39 behaves the way it does in real-world applications, we must first dissect its physical structure. A Code 39 barcode is not a random sequence of thick and thin lines; it is a carefully orchestrated pattern that balances error resistance, print tolerance, and scanner simplicity. | Every complete Code 39 symbol consists of three distinct parts: the leading quiet zone, the encoded data surrounded by asterisks, and the trailing quiet zone. The quiet zone is simply white space - no printing, no marks, no text. Its minimum width is ten times the width of a narrow bar (usually referred to as X dimension). For a typical X dimension of 0.010 inches, that is 0.10 inches on each side. If the quiet zone is too small, the scanner cannot distinguish the start of the barcode from the surrounding clutter, and decoding fails. In practice, many industrial labels specify a quiet zone of 0.25 inches to account for label placement tolerances and dirty scanner windows. | The asterisk characters are the sentinels. The encoder always places an asterisk at the beginning and another at the end, but these asterisks are not data - they are control patterns. Their specific bar-space pattern is unique, and it cannot appear inside any valid data character. That uniqueness allows the scanner to determine the reading direction. If the scanner reads the barcode backwards, it will see the asterisk pattern inverted and can reverse the sequence automatically. This bidirectional readability is a major practical advantage because operators do not have to orient the label perfectly. | Between the two asterisks, the data characters are arranged in order, with each character separated by a narrow intercharacter gap. This gap is actually a space of exactly the narrow width, and it is not part of any character's encoding. The gap exists to help the scanner distinguish where one character ends and the next begins. Because Code 39 uses variable lengths, the scanner must locate these gaps to segment the symbol into individual characters. This segmentation is usually reliable, but it can fail if the intercharacter gap merges with an adjacent wide space, especially at low print resolution. That failure mode is one reason high-density applications prefer Code 128, which uses a different encoding scheme that does not rely on intercharacter gaps. | Now let us look inside a single character. Each of the 43 data characters is represented by nine elements: five bars (dark) and four spaces (light). Of those nine, exactly three are wide. The wide elements can be bars or spaces - the pattern of which positions are wide determines the character. For example, the letter 'A' has wide bars in positions 1, 2, and 4, with wide spaces in positions 1 and 3 (the positions are counted from left to right across the nine elements). The digit '1' has a different pattern, and the dash has yet another. The complete mapping table was published by Intermec in 1974 and has remained unchanged since. | The wide-to-narrow ratio, often denoted as N, is the multiplier that converts a narrow element into a wide one. The Code 39 specification allows N to range from 2.0 to 3.0, but the most common value is 2.5. That means if narrow bars are 0.010 inches wide, wide bars are 0.025 inches. Why such a wide toleranceBecause in 1974, printers could not produce perfectly sharp edges. Dot-matrix printers would create jagged bars, and impact printers would sometimes smear ink. By allowing a 2:1 to 3:1 ratio, the decoder could still distinguish wide from narrow even with significant print distortion. Today, with thermal and laser printing, we could use a tighter ratio and achieve higher density, but the standard retains the 2.0 to 3.0 range for backward compatibility. | The scanner decodes a Code 39 symbol by measuring each element's width and comparing it to the average narrow width. It assigns a binary value - 1 for wide, 0 for narrow - to the five bars and four spaces, producing a 9-bit pattern. Then it checks that exactly three bits are set to 1. If the pattern has not exactly three wide elements, the scanner rejects the character as invalid. This self-checking property is critical in noisy environments. For instance, if a bar is partially scratched, the scanner might misread its width, but the resulting pattern will almost certainly have either two or four wide elements, triggering an automatic rejection. The scanner then attempts to rescan the symbol or signals an error. This happens in milliseconds, and the operator may never notice. | The optional check digit, when used, is calculated using modulo 43 arithmetic. Each of the 43 characters is assigned a value from 0 to 42 (A=10, B=11, ..., Z=35, 0=0, 1=1, ..., 9=9, dash=36, period=37, space=38, dollar=39, slash=40, plus=41, percent=42). The encoder sums the values of all data characters, divides by 43, and appends the character corresponding to the remainder. The scanner performs the same calculation and compares the appended character. If they match, the data is considered valid; if not, the scanner rejects the entire symbol. This check digit catches most single-character errors but is not as strong as modern cyclic redundancy checks. However, for alphanumeric part numbers and patient IDs, it is usually sufficient. | 
| One subtle but important detail: the asterisk start/stop pattern itself does not contain exactly three wide elements - it contains two wide bars and one wide space, which also sums to three, so it fits the same rule. That consistency allows the same decoder logic to identify the framing characters without special cases. This elegant design choice reduced the complexity of early hardware decoders, which had very limited memory and processing power. | Understanding this anatomy is essential for appreciating the application stories in the next chapters. For example, the wide-to-narrow ratio determines how much print quality degradation a label can tolerate - a higher ratio (like 2.8) is more forgiving but produces a longer barcode. The intercharacter gap affects how closely characters can be packed, which matters when you need to fit a 20-character part number on a tiny electronic component. The quiet zone is often the first thing to be violated when a designer tries to save space, leading to intermittent scanning failures that are maddening to troubleshoot. And the optional check digit, while simple, can be the difference between a mislabeled medication and a correct dose. | In the next chapters, we will see how these technical parameters interact with the physical and operational constraints of each industry. But first, let us address a common misconception: many people think Code 39 is obsolete because it is 'old.' That is like saying the screwdriver is obsolete because we have power drills. Code 39 occupies a specific niche - low-cost, universal, tolerant of poor printing, and human-readable without special fonts. It is not the best choice for high-density, high-security, or high-volume retail applications, but for tracking a million different spare parts across a dozen suppliers, it remains remarkably effective. | 
| Chapter 3: Automotive Manufacturing - The Trail of the Spare Part | The automotive industry was one of the earliest and most enthusiastic adopters of Code 39. In the late 1970s and early 1980s, car manufacturers faced a nightmare of inventory management. A single vehicle model could have thousands of unique parts, each with alphanumeric part numbers like 'A12345-678' or 'BRK-90210.' These part numbers came from hundreds of suppliers, each using their own internal coding systems. The assembly line needed a way to verify that the right part arrived at the right station at the right time, without relying on human eyes to read tiny embossed numbers. | Code 39 entered this environment not as a shiny new technology, but as a pragmatic solution. Its variable length meant that a part number like 'A12345' and another like 'X999-Z42' could be encoded without any padding. Its ability to encode letters and dashes matched the existing part numbering conventions perfectly. And its tolerance to printing imperfections was crucial because parts were often labeled with ink-jet or dot-matrix printers on dirty, oily surfaces. | Consider a real-world example from a major European carmaker in the 1990s. They used Code 39 to label every engine subassembly - cylinder heads, crankshafts, camshafts, and oil pans. Each subassembly had a 12-character alphanumeric code that included the plant code, year, model variant, and a sequential serial number. The labels were printed on thermal transfer printers with a narrow bar width of 0.015 inches and a wide-to-narrow ratio of 2.5. The quiet zone was 0.3 inches. With those parameters, each symbol measured about 3.5 inches in length, which fit comfortably on the metal tags that were riveted to the engine block. | The technical feature that mattered most in this application was the wide-to-narrow ratio's tolerance to smudging. Engine blocks are covered in oil, and even after cleaning, residual grease would sometimes smear the printed bars. A Code 39 decoder with a ratio tolerance of 2.0 to 3.0 could still read a smudged symbol where a tighter symbology like Code 128 would fail. Additionally, the self-checking property caught errors when the oil smear created an extra wide bar - the decoder would reject that character and trigger a re-read, rather than outputting a wrong part number. This prevented assembly line workers from installing the wrong cylinder head, which could have resulted in catastrophic engine failure. | However, the automotive industry also exposed Code 39's primary weakness: low density. A 12-character part number with start/stop and check digit (optional but often used) resulted in 14 characters total, each requiring about 15 X-dimensions, for a total of 210 X-dimensions plus quiet zones. At 0.015 inches per narrow bar, that was over 3 inches. For a small component like a fuel injector, a 3-inch label was too large. The solution was either to reduce the X dimension (down to 0.008 inches) or to switch to a different symbology for small parts. Many manufacturers did both - they used Code 39 for large assemblies and Interleaved 2 of 5 for numeric-only small parts, but that created a two-symbology inventory system that confused operators. | By the mid-2000s, the automotive industry began migrating to Code 128 for new designs because it offered about 30% more density per character. But the transition was slow. Tens of millions of existing parts with Code 39 labels were still in the supply chain, and replacement tooling for legacy scanners was expensive. Even in 2026, you will find Code 39 on many aftermarket automotive parts, especially those sourced from smaller suppliers who do not have the capital to upgrade. The symbology has become a de facto standard for 'non-retail' parts - anything that is not sold through a supermarket checkout. | 
| Another automotive application is the tracking of returned cores - used parts that are rebuilt and resold. When a customer returns a used alternator or starter motor, the repair shop attaches a Code 39 label that encodes the core's original part number and the date of return. The variable length allows the shop to append a return authorization number without changing the fixed part number prefix. This flexibility is invaluable because return authorization numbers can be 6 or 10 digits depending on the region. With a fixed-length symbology like UPC, they would have to choose a maximum length and pad with zeros, which adds complexity. | The intercharacter gap in Code 39 also plays a subtle role in automotive assembly. On a busy production line, labels are often scanned at high speed while the part is moving on a conveyor. The gap helps the scanner synchronize its timing, because each character's start and end are clearly marked by the narrow spaces. This feature reduces the computational burden on older scanners, which had limited processing power. In contrast, continuous symbologies like Code 128 require more sophisticated edge-detection algorithms, which were not available in low-cost scanners in the 1980s. | Today, most new automotive platforms use DataMatrix 2D codes for small parts because they can encode hundreds of characters in a space smaller than a postage stamp. But for large, flat labels on shipping containers, engine crates, and pallets, Code 39 remains a common sight. Its readability under harsh lighting - fluorescent, incandescent, and even direct sunlight - is excellent because the simple wide/narrow decision is less sensitive to lighting variations than the fine-grained edge measurements required by 2D codes. Warehouse workers often use handheld CCD scanners that can read Code 39 from a distance of 2 feet, which is convenient when labels are on top of tall racks. | In summary, the automotive sector values Code 39 for its part number compatibility, print tolerance, and scanner universality. Its low density is a manageable drawback on large parts, and its optional check digit provides enough error detection for most inventory tasks. The application demonstrates a key principle: the best symbology is not the most advanced, but the one that matches the physical and operational constraints of the job. For a 3-inch metal tag on an engine block, Code 39 is still a rational choice. | 
| Chapter 4: Healthcare - Wristbands, Blood Bags, and Patient Safety | If there is one industry where Code 39 has saved more lives than any other, it is healthcare. Hospital wristbands bearing Code 39 barcodes are scanned thousands of times a day to verify patient identity before medication administration, blood transfusion, and surgical procedures. The requirements in healthcare are uniquely stringent: the code must be readable on curved surfaces (the wrist), under low lighting (night shifts), with high reliability (no wrong-patient errors), and it must encode alphanumeric data like the patient's medical record number, birth date, and sometimes blood type. | The adoption of Code 39 in healthcare began in the 1980s with blood banks. Each unit of donated blood is labeled with a unique donation number that includes letters and digits - for example, 'D12345678A.' The American Association of Blood Banks recommended Code 39 for these labels because it could encode the alphanumeric ISBT 128 standard, which includes letters and digits. The self-checking property was especially valuable because a misread blood type - say, reading 'A' as 'B' - could be fatal. The scanner's immediate rejection of invalid characters added an extra layer of safety beyond the optional check digit. | The wristband application emerged in the 1990s. Hospitals wanted a durable, inexpensive, and scannable way to link a patient to their electronic medical record. The wristband is printed on thermal paper with a adhesive backing, and the barcode is typically placed near the patient's name and date of birth. The technical challenge is that the wristband is curved around the wrist, which distorts the barcode's aspect ratio. Code 39's wide-to-narrow ratio tolerance (2.0 to 3.0) accommodates this distortion better than many other symbologies. If the wristband is stretched or the wrist is particularly large, the bars widen slightly, but the decoder still recognizes them as wide because the ratio remains above 2.0. | The quiet zone requirement, however, is a frequent source of trouble in wristband printing. Many hospitals use low-cost thermal printers with poor registration, and the label stock may shift during printing. If the quiet zone shrinks below 10 X-dimensions, the scanner may read the barcode backward or not at all. To mitigate this, many hospitals specify a quiet zone of 0.2 inches and use printers with automatic label alignment. They also train nurses to scan the wristband at a slight angle, which helps the scanner find the quiet zones because the barcode appears narrower from an oblique view. | Another critical healthcare application is medication administration. The 'Five Rights' of medication safety - right patient, right drug, right dose, right route, right time - are often checked using barcodes. The drug vial is labeled with a Code 39 barcode that encodes the National Drug Code (NDC), which is a 10-digit number with optional hyphens. Because the NDC includes leading zeros, and some systems require the check digit, the variable length of Code 39 allows the pharmacy to include or exclude the hyphens as needed. For example, one hospital might encode '12345-678-90' while another encodes '1234567890' - both are valid Code 39 symbols, and both can be read by the same scanner. | 
| However, the variable length also introduces a risk in medication scanning. If a nurse scans a vial and the scanner accidentally reads only part of the barcode due to a damaged label, the scanner might output a shorter valid code that matches a different drug. This is a rare but known failure mode. The countermeasure is to use the optional check digit, which makes it exponentially unlikely that a partial read would produce a valid check character. Most hospital pharmacy systems mandate the modulo 43 check digit for drug labels, even though the GS1 standard does not require it. This is a perfect example of how industry practice adapts a technical feature to a specific safety need. | Blood transfusion is perhaps the most emotionally charged application. A patient with type O-negative blood can receive only O-negative units, and a mismatch causes a hemolytic reaction that can be fatal. Blood bag labels from major suppliers like the Red Cross use Code 39 to encode the unit number, blood type, and expiration date. The label is read before the transfusion, and the system cross-checks the patient's wristband barcode. The self-checking property ensures that a damaged label - which might have a scuffed bar or a folded corner - is rejected rather than misread. In practice, nurses are trained to scan the label three times if they get an error, and the barcode's tolerance to physical damage reduces the frequency of those errors. | The low density of Code 39 is actually an advantage in blood banking because blood bags are large and flexible, with plenty of surface area for a 4-inch barcode. A longer barcode is easier for the nurse to see and align with the scanner, reducing the cognitive load. In contrast, a tiny DataMatrix would be harder to locate on a wrinkled plastic bag. This is a recurring theme: density is not always a virtue; sometimes, visibility and human ease of use matter more. | One less-known healthcare use is in surgical instrument tracking. Each instrument tray used in an operating room contains dozens of clamps, retractors, and scalpels. The tray itself has a Code 39 label with a tray ID and a sterilization date. After surgery, the tray is sent to central sterilization, where it is washed, autoclaved, and re-labeled. The autoclave process involves high heat and moisture, which can degrade label adhesives and print contrast. Code 39's wide bars and simple structure allow it to remain readable even if the label has faded or the backing has curled slightly. Many newer hospitals have switched to direct part marking with DataMatrix on the instruments themselves, but the tray-level tracking still uses Code 39 because it is cheaper and faster to print on disposable labels. | In healthcare, the cost of a scanner misread is not a lost sale or a restocking fee - it is a patient's life. That is why the industry values the self-checking and check-digit features of Code 39 so highly. While newer symbologies like GS1 DataMatrix offer more error correction (Reed-Solomon), they also require higher print quality and more expensive scanners. In rural hospitals and developing countries, the availability of low-cost laser scanners that read Code 39 perfectly is a major advantage. The symbology's 50-year legacy means that every biomedical equipment vendor, from barcode printers to hospital information systems, supports Code 39 natively. That interoperability reduces training time and maintenance costs. | 
| However, the healthcare industry is gradually moving to 2D barcodes for medication administration, driven by FDA regulations that require more data (lot number, expiration date, and NDC) in a single symbol. But even in 2026, the wristband remains predominantly Code 39 because wristbands are printed on-the-fly at admission desks, and thermal printers can produce a Code 39 label faster and with less memory than a QR code. The hospital's legacy scanners, many of which are 15 years old, cannot read 2D codes. Upgrading thousands of scanners across a hospital network costs millions of dollars, so the transition is slower than the technology enthusiasts would like. | To summarize, healthcare applications exploit Code 39's self-checking nature, tolerance to curved surfaces and print degradation, universal scanner support, and variable length for flexible data formats. The primary drawback - low density - is irrelevant on wristbands and blood bags, which have ample space. The optional check digit becomes mandatory in safety-critical sub-systems. The lesson from healthcare is that safety and reliability often outweigh efficiency, and a 'good enough' barcode that works every time is better than a 'perfect' barcode that fails occasionally. | 
| Chapter 5: Logistics and Warehousing - The Backbone of the Supply Chain | Warehouses and distribution centers are the circulatory system of global commerce. Every pallet, every carton, and every tote is scanned multiple times as it moves from receiving to put-away, picking, packing, and shipping. In this environment, the barcode must be readable from various angles, at high speeds, and on surfaces ranging from shiny shrink-wrap to corrugated cardboard. Code 39 has been a logistics staple since the 1980s, and it remains visible in millions of warehouses worldwide. | The key technical feature that suits logistics is the wide-to-narrow ratio's accommodation of low-cost printing. Corrugated cardboard is an extremely uneven substrate - it has waves, ridges, and variable absorbency. Direct thermal or ink-jet printing on cardboard produces bars with jagged edges and variable widths. A Code 39 symbol printed with a ratio of 2.5 will still decode correctly even if some bars are 30% wider than intended, as long as they remain significantly wider than the narrow bars. In contrast, a high-density symbology like PDF417 would require a much smoother surface to achieve comparable reliability. | Consider a typical cross-dock operation: pallets arrive from multiple suppliers, each with a Code 39 label that encodes the purchase order number (e.g., 'PO-2026-45678'). The receiving clerk scans the label using a handheld terminal. The terminal's scanner reads the barcode from a distance of 6 to 12 inches, and the wide bars provide a strong signal-to-noise ratio even under fluorescent lights that flicker at 60 Hz. The terminal decodes the data in under 50 milliseconds and queries the warehouse management system. If the system returns a match, the pallet is directed to a staging lane. This entire cycle - scan, decode, query, respond - takes less than one second. | The variable length of Code 39 is a huge advantage in logistics because purchase order numbers come in many formats. One supplier uses 'PO-2026-45678' (14 characters), another uses 'ORD-456-7890' (13 characters), and a third uses 'DEPT12-ABC-567' (15 characters). With Code 39, each supplier's label can remain unchanged. The warehouse scanner does not need to know the expected length in advance; it just reads whatever is there. This flexibility reduces the burden on suppliers, who would otherwise need to reformat their data to fit a fixed-length symbology. | 
| However, logistics also highlights the downside of the optional check digit. Some suppliers include the modulo 43 check digit, others do not. If a warehouse scanner is configured to verify the check digit, it will reject labels that do not have it. If it is configured to ignore the check digit, it will accept labels that have it, but it will treat the check digit character as part of the data. That can lead to data corruption - the warehouse system might store an extra character at the end of the part number, causing mismatches with downstream systems. To avoid this, most large logistics operators mandate a strict format: they specify that all Code 39 labels must have the check digit, and the check digit must be stripped by the scanner before the data is sent to the host. This is a common practice, but it requires careful coordination with all suppliers. When coordination fails, the result is often a 'scan but no match' error, which slows down the receiving process. | Another logistics use case is sortation systems in parcel hubs. Conveyor belts carry packages at speeds of up to 500 feet per minute. Overhead laser scanners read the Code 39 labels on the packages and divert them to the correct chute. In this high-speed environment, the intercharacter gap is essential. As the package moves, the barcode passes under the scanner at an angle, and the scanner must determine the start and end of each character from a partial view. The narrow intercharacter gaps provide clear synchronization points, allowing the decoder to resynchronize after each character. If the gap were absent (as in continuous symbologies), the decoder would have to track the entire sequence without resets, which is more computationally intensive and error-prone at high speeds. | The density issue is pronounced in logistics for small packages. A typical shipping label might need to encode a tracking number like '1Z9999X99999999999' (18 digits) plus a service code like 'GND' (3 letters) - total 21 characters. In Code 39, that would be about 21 * 15 * X-dimension = 315 X-dimensions. At a standard X of 0.013 inches, that is 4.1 inches of barcode. On a 4x6-inch shipping label, that is acceptable, but it leaves little room for other information like the recipient's address. Many carriers, including UPS and FedEx, have moved to MaxiCode or PDF417 for their primary labels because they pack more data into a smaller area. However, for internal warehouse labels that are not customer-facing, Code 39 is still widely used because the label can be larger and the printer cost is lower. | One niche logistics application is cross-docking with reusable plastic containers (totes). These totes are washed and reused hundreds of times, and their labels must withstand abrasion, water, and cleaning chemicals. Code 39 labels are often printed on durable polyester with a permanent adhesive, and the wide bars provide enough contrast even after the label has been scratched. The self-checking property rejects any scratch that creates a false wide bar, preventing misreads. In contrast, a high-density 2D code would be rendered unreadable by a single deep scratch across its matrix. | 
| In warehouses that operate in cold storage (below freezing), the barcode labels face condensation and ice formation. Code 39's simple wide/narrow decision is less affected by ice crystals that scatter light than the fine grid patterns of QR codes. Workers in meat-packing plants and frozen food distribution centers report that Code 39 scans reliably even when the label is covered with a thin layer of frost. This robustness is a direct result of the low information density - each character's pattern is spatially large enough that localized frost does not obscure all the wide elements simultaneously. | Despite the rise of RFID and 2D barcodes, Code 39 remains the default fallback for many warehouse management systems. When a new printer is installed or a new label format is designed, the first test is always a Code 39 sample because it is guaranteed to work with every scanner in the facility. The symbology's universality reduces the troubleshooting burden on the IT staff. In many warehouses, the motto is 'If it scans in Code 39, it's good to go.' This cultural inertia is powerful and often overlooked in technical comparisons. | To conclude the logistics chapter, Code 39's strengths - print tolerance, variable length, intercharacter gaps for synchronization, and universal scanner support - make it a reliable workhorse for non-retail logistics. Its weaknesses in density are manageable with larger labels, and the check digit ambiguity can be resolved with clear supplier standards. The logistics industry values predictability and robustness over ultimate efficiency, and Code 39 delivers on both fronts. | 
| Chapter 6: Defense and Aerospace - MIL-STD and the Long Tail | The United States Department of Defense (DoD) has a reputation for sticking with proven technologies long after they are considered obsolete in the commercial world. Code 39 is a prime example. In the 1980s, the DoD issued MIL-STD-1189, which mandated the use of Code 39 for item identification across all branches of the military. Later, MIL-STD-129 superseded it, but the requirement for Code 39 persisted for decades. Even today, many defense contracts specify Code 39 for marking spare parts, weapons components, and ammunition packaging. | Why would the most technologically advanced military on Earth rely on a barcode from 1974The answer lies in the defense supply chain's extreme environment. Spare parts are stored in desert depots with temperatures exceeding 130 degrees Fahrenheit, on naval ships with salt spray and humidity, and in arctic warehouses where temperatures drop to minus 40 degrees. The labels must survive these extremes for up to 20 years. Code 39's wide bars, printed with high-contrast inks on metal or polyester, remain readable after the label has faded, yellowed, or been abraded by sand and dust. | The self-checking property is particularly valued in defense because a misidentified part could cause a critical failure. Imagine a fighter jet's hydraulic pump being replaced with a pump that has a slightly different pressure rating - the jet might lose hydraulic power in flight. Code 39's rejection of invalid patterns prevents the scanner from outputting a wrong part number, even if the label is partially damaged. The military often uses the optional check digit as well, adding an extra layer of validation. In fact, the standard MIL-STD-130 for item marking requires a Code 39 label with a check digit for many categories of material. | The wide-to-narrow ratio tolerance is essential for defense labels because they are often produced by field printers - portable thermal printers that are not as precise as industrial fixed printers. These printers may have worn-out printheads or low battery voltage, causing inconsistent bar widths. A Code 39 symbol printed with a ratio of 2.2 instead of the nominal 2.5 will still decode correctly, whereas a Code 128 symbol might fail. This resilience reduces the number of rejected labels and the need for reprints, which is critical in a combat zone where resupply is limited. | Another defense application is ammunition marking. Artillery shells, mortar rounds, and missile components are marked with Code 39 barcodes that encode lot numbers, manufacture dates, and explosive classifications. The labels are applied to the side of the shell or to the shipping container. Because ammunition is subject to harsh handling - dropping, stacking, and vibration - the barcode must be readable even if the label is scuffed. Code 39's low density means that each bar is relatively wide, so a scuff that removes 0.005 inches of a narrow bar might still leave it narrower than the wide bars, preserving the decoding. This is a direct consequence of the spatial margin provided by the wide/narrow ratio. | 
| The aerospace industry, while not strictly defense, shares many requirements. Aircraft manufacturers like Boeing and Airbus use Code 39 for traceability of critical components - engines, landing gear, avionics. Each component has a unique serial number that is encoded in Code 39 and tracked from assembly through maintenance. The maintenance manuals specify that every scanned component must be verified against a database; the check digit ensures that a manual entry error (if the operator types the barcode instead of scanning) is caught. However, in aerospace, the trend is shifting to 2D DataMatrix for small parts because the aerospace industry adopted the IAQG 2D standard for direct part marking. But for large external labels on fuselage sections or wing boxes, Code 39 is still often seen because those labels are large enough to accommodate it. | One interesting defense use case is the 'long tail' of legacy equipment. The U.S. military operates tanks, ships, and aircraft that were designed in the 1980s and are still in service. These platforms have maintenance procedures written around Code 39 scanning. Upgrading all the scanners, training thousands of maintenance personnel, and changing the procurement specifications for new spare parts would cost billions of dollars and take decades. As long as the legacy systems remain operational, Code 39 remains the language of their supply chain. This is a textbook example of technical debt in a large organization. | The main drawback in defense is that Code 39 cannot encode lowercase letters or many special characters. This limitation becomes problematic when the military adopts newer data standards that use underscores or brackets. The workaround is to use Code 39's 'full ASCII' mode, which maps each lowercase letter to a two-character sequence like '$A' for 'a'. But this doubles the barcode length, making it even less dense. Many defense contractors simply avoid using those characters in their part numbers, sticking to uppercase, digits, dash, and period. This constraint is accepted because it simplifies the overall system. | In summary, defense and aerospace value Code 39 for its extreme ruggedness, compatibility with field printers, self-checking reliability, and legacy system alignment. The symbology's limitations - low density and limited character set - are acceptable trade-offs for a supply chain that prioritizes 100% correct reads over compactness or data richness. The military's gradual move to DataMatrix for new platforms will continue, but Code 39 will remain on the shelves of depots and the wings of older aircraft for many years to come. | 
| Chapter 7: Libraries and Archival Record Management | While industry and defense grab the headlines, Code 39 has a quieter but equally enduring presence in libraries, archives, and record management. Libraries adopted barcodes in the 1980s to automate check-in, check-out, and inventory. The library environment is benign - dry, temperature-controlled, and well-lit - but it has its own set of constraints: the barcode must be affixed to the inside cover of books, which are handled by thousands of patrons, and it must be readable at a checkout counter with a fixed scanner or a handheld device. | The library application favors Code 39 for several technical reasons. First, library barcodes typically encode a patron ID or book ID that is alphanumeric - e.g., 'B1234567' for a book and 'P9876543' for a patron. Code 39 handles both seamlessly. Second, the variable length allows different institutions to use different ID lengths. Some libraries use a 7-digit ID, others use a 10-digit ID with letters, and Code 39 accommodates them all without any reformatting. This flexibility is crucial in inter-library loan systems, where books from hundreds of libraries are exchanged, each with its own numbering scheme. | The quiet zone is rarely an issue in libraries because the label is placed on a flat, clean surface (the book's endpaper or the inner cover) and the scanner is usually mounted on the counter at a fixed distance. However, the intercharacter gap becomes important when books are scanned rapidly at the checkout counter. A patron may have 20 books, and the librarian scans each one in quick succession. The scanner must reliably segment the barcode of one book from the next, even if the books are stacked close together. The narrow intercharacter gaps within each Code 39 symbol ensure that the scanner does not accidentally merge two adjacent symbols, because the gap between characters inside the symbol is smaller than the gap between symbols (the quiet zone). This self-segmentation property is a subtle but valuable feature that reduces false reads during batch scanning. | Archives and record management use Code 39 for tracking physical files, boxes of documents, and microfilm rolls. In these settings, the barcodes are often printed on adhesive labels that are attached to file folders. The labels must be legible for decades, and the adhesive must not degrade the paper. Code 39's simple pattern is easy to print with archival-quality ink that does not fade or bleed. Many archives also use the optional check digit to ensure that a scanned file number is valid, because a mis-filed document could be lost for years. | 
| One modern library application is self-checkout kiosks. Patrons scan their library card (Code 39) and then each book (also Code 39). The kiosk software decodes the barcode and updates the library's circulation system. The self-checking property prevents the kiosk from accepting a damaged card - if the card's barcode has a scratch that creates an invalid pattern, the kiosk asks the patron to try again or see a librarian. This reduces the number of 'unknown patron' errors that would otherwise require manual intervention. | The low density of Code 39 is actually welcome in libraries because the barcode must be printed on a small label that fits on a book spine or inside cover. However, a 10-character book ID in Code 39 at an X-dimension of 0.010 inches is about 1.5 inches long, which fits comfortably on most books. If the library uses longer IDs (e.g., 15 characters with a check digit), the label might be 2.5 inches, which still fits on the inside cover of a typical hardcover book. The library does not need high density because the label surface is not space-constrained like a surgical instrument. In fact, a larger barcode is easier for patrons to align with the kiosk scanner, improving the user experience. | Libraries have another unique requirement: the barcode must be readable through a protective plastic sleeve. Some libraries cover the barcode with a clear polyester film to prevent wear. This film adds a reflective layer that can cause glare. Code 39's wide bars provide a strong contrast that cuts through the glare, while a 2D code's fine modules would be more affected by the specular reflection. Librarians consistently report that Code 39 scans better through plastic covers than QR codes or DataMatrix. | In the archival world, Code 39 is also used for inventory audits. Archivists scan the barcodes on boxes and compare them to a database to locate missing items. The scanners used are often older CCD devices that have limited processing power but are robust and battery-efficient. These scanners are optimized for Code 39 because that was the dominant symbology when they were procured. Replacing them with newer imagers that read 2D codes would require a capital expense that many historical societies and municipal archives cannot afford. So Code 39 persists by default. | The main limitation in libraries is the inability to encode lowercase letters, which appear in some modern call number systems like Library of Congress classification (which includes lowercase letters after the initial letters). Libraries solve this by using the full ASCII mode of Code 39, but that doubles the length. Alternatively, they simply restrict call number barcodes to the standard 43 characters and use separate text labels for the call number. This is not a major inconvenience because the barcode is used for inventory, while the call number is displayed in human-readable text on the spine. | To conclude, Code 39 in libraries and archives demonstrates how a symbology can find a niche based on simplicity, longevity, and universal support, even in a non-industrial setting. The technical features - variable length, self-checking, tolerance to plastic covers, and low-cost printing - align perfectly with the library's operational needs. The density issue is mitigated by the ample label space. The result is a symbology that has served libraries for over 40 years and will likely continue for another 20. | 
| Chapter 8: Energy and Utilities - Oil Rigs and Power Plants | The energy sector - oil and gas, nuclear power, hydroelectric, and wind - operates in some of the most physically demanding environments on Earth. Offshore oil rigs face saltwater corrosion, high winds, and explosive atmospheres. Nuclear plants require extreme traceability for safety-critical components. Wind turbines are located in remote, cold, and wet locations. Code 39 has a strong foothold in all these sub-sectors because of its ruggedness and simplicity. | On an offshore oil platform, every pipe flange, valve, and pump has an identification tag. These tags are often metal plates with the barcode embossed or laser-etched, because paper labels would not survive the corrosive salt spray. Laser-etched Code 39 symbols on stainless steel have high contrast because the etched area is dark, while the unetched metal is reflective. The wide-to-narrow ratio of 2.5 provides a clear distinction even when the laser etching is shallow. The self-checking property ensures that a partial corrosion spot does not produce a false character. | The variable length is crucial in oil and gas because equipment tags often include a well number (e.g., 'W-12'), a platform code (e.g., 'PLT-A'), and a sequential serial number - altogether a string like 'W-12-PLT-A-0456'. That is 16 characters, which Code 39 encodes without any padding. In contrast, a fixed-length numeric symbology would require leading zeros or truncation, which could cause confusion in maintenance records. The check digit is mandatory in many oil companies' internal standards because a wrong valve identification could lead to opening the wrong pressure line, with catastrophic consequences. | The quiet zone requirement is often challenged on oil rigs because the metal tags are small (typically 1x2 inches) to avoid interfering with pipe insulation. Designers try to shrink the quiet zone to 5 X-dimensions to fit a longer part number, but that causes intermittent scanning failures due to the metal's reflectivity. The solution is to use a smaller X-dimension (0.008 inches) and a lower wide-to-narrow ratio (2.0), which shortens the barcode while maintaining the required quiet zone. This trade-off works because the laser-etched bars have very sharp edges, so a low ratio is acceptable. This is an example of optimizing the symbology parameters for a specific printing technology. | In nuclear power plants, Code 39 is used for tracking replacement parts, radiation badges, and calibration records. The primary concern here is not environmental degradation, but rather the strict regulatory requirements of the Nuclear Regulatory Commission (NRC). The NRC requires that every safety-related component be traceable back to its manufacturing batch, test results, and installation date. Code 39's alphanumeric capability allows the part number to include letters that denote the safety classification (e.g., 'SAFE-123' vs. 'NON-456'). The optional check digit is used to prevent transcription errors when manual backup is needed. | Wind farms present a different challenge: the barcode labels are attached to towers that are 300 feet tall, and they are scanned by maintenance crews using handheld devices while suspended in a basket. The labels must be readable from a distance of 2 to 3 feet because the worker cannot always get close to the surface. Code 39's wide bars, printed with high-contrast reflective material, are visible at that distance even in low light. The label must also withstand UV radiation from sunlight, which degrades many inks. Polyester-based Code 39 labels with UV-resistant overlaminate have a proven track record of 10 years of outdoor exposure. | In the energy sector, the barcode is often used in conjunction with a human-readable alphanumeric code printed directly below it. This dual-coding is important because if the scanner fails, the worker can read the text and manually enter the data. Code 39's design makes this pairing easy because the encoded data is identical to the human-readable text, unlike some proprietary symbologies that use compression. The resemblance between the barcode data and the printed text reduces operator confusion and errors. | 
| The low density of Code 39 is a significant drawback in energy applications where space is limited, such as on small circuit breakers or fuse holders. In these cases, many manufacturers have switched to DataMatrix or QR codes. However, for the majority of large equipment - transformers, generators, and switchgear - the available surface is large enough for a 4-inch Code 39 label. The energy industry is conservative and risk-averse; they are slow to adopt new symbologies because a misread in a safety-critical environment can have severe legal and operational consequences. Code 39's long history means that its failure modes are well understood, which is a significant advantage in risk assessment. | Another energy-specific use is pipeline inspection. Smart pigs - robotic devices that travel inside oil and gas pipelines - carry sensors and cameras. They often scan code markers placed at intervals along the pipeline to determine their position. These markers are Code 39 labels affixed to the inside wall of the pipe. The label must survive the pig's mechanical scraping and the pipeline's internal pressure and temperature. Code 39's robust wide elements are more resilient to abrasion than the fine features of 2D codes. Pipeline operators report that Code 39 markers remain readable after multiple pig runs, while QR markers often fail after the first run. | In summary, the energy and utilities sector leverages Code 39's ruggedness, alphanumeric capability, check digit flexibility, and established reliability. The symbology's low density is mitigated by large equipment surfaces, and its simple decoding algorithm is compatible with explosion-proof scanners that have limited processing power. As with defense, the energy industry is moving toward 2D codes for new installations, but the installed base of Code 39 is so vast that it will remain a dominant symbology for decades. | 
| Chapter 9: Retail (Non-UPC) - Gift Cards, Loyalty Cards, and In-Store Printing | When most people think of retail barcodes, they think of UPC - the 12-digit numeric code found on almost every consumer product. But there is a vast retail sub-sector where Code 39 thrives: gift cards, loyalty cards, membership cards, and in-store printed price labels. These applications have very different requirements from supermarket checkout, and Code 39 fits them well. | Gift cards and loyalty cards typically encode a card number that is alphanumeric - for example, 'GIFT-2026-12345' or 'LOYAL-A999'. These numbers are issued by the store's own system and are not constrained by GS1 standards. Code 39's variable length allows each store to define its own card numbering scheme without padding. The card is usually printed with a magnetic stripe and a barcode; the barcode serves as a secondary or primary identifier depending on the point-of-sale system. Many small retailers use Code 39 because their POS software, often developed in-house, can generate and decode it easily using open-source libraries. | The self-checking property is less critical for gift cards because a misread usually just means the cashier has to type the number manually, which is an inconvenience but not a safety hazard. However, the quiet zone is important because gift cards are often placed in wallets and become scratched. The quiet zone helps the scanner find the barcode even if the card is partially covered by a finger or a sticker. Many gift card issuers actually enlarge the quiet zone to 0.2 inches to improve first-pass scan rates, accepting the slightly larger card size. | In-store price labels are another interesting use. For items that are not prepackaged - like deli meats, cheeses, and bulk nuts - the store prints a label at the point of sale with the weight, price, and a barcode. The barcode typically encodes the PLU (price look-up) number, which is a 4- or 5-digit numeric code, but some stores also include the weight and price in alphanumeric format. Code 39 is chosen because the in-store printers are often low-resolution thermal printers with limited processing memory. Generating a Code 39 symbol requires less computation than generating a UPC or EAN symbol because Code 39 does not require a fixed-length encoding table with heavy modulo checks. The printer driver can encode a Code 39 symbol in a few kilobytes of code, which is important for older POS systems. | One subtle advantage in retail is that Code 39 barcodes can be printed with a human-readable interpretation directly below the barcode, and the interpretation matches exactly the encoded characters. This allows the cashier to visually verify the price if the scanner fails. With UPC, the human-readable numbers are usually printed, but they do not include the check digit in a way that is easy to reconcile. Code 39's transparency reduces checkout errors. | However, retail applications also expose the check digit ambiguity. Some stores include the modulo 43 check digit in their gift card numbers; others do not. If a customer buys a gift card from a store that includes the check digit and tries to use it at a store that does not (due to a merger or acquisition), the scanning may fail. To avoid this, many retailers have standardized on a simple 16-digit numeric code and use Code 39 in its numeric-only mode, effectively using it as a numeric barcode with variable length. That works, but it is not the most efficient use of the symbology. | 
| The density of Code 39 is rarely a problem in retail gift cards because the card is credit-card-sized (3.37 x 2.13 inches), providing plenty of space for a 2-inch barcode. In fact, a longer barcode is often preferred because it makes the card look more 'technical' and secure to customers. The visual appearance of the barcode matters in consumer-facing products, and Code 39's recognizable pattern of thick and thin bars is associated with 'professional' or 'secure' systems in the public's mind. | One emerging retail use is for mobile coupon codes. Some apps generate a Code 39 barcode on the phone screen, which the cashier scans with a handheld scanner. The app encodes a promotion code like 'SAVE20-OFF'. The variable length allows different promotion codes to have different lengths, and the scanner's ability to read Code 39 from a glowing phone screen (which has lower contrast than printed labels) is a testament to the symbology's tolerance. The wide-to-narrow ratio helps because the phone's pixels are discrete, and the wide bars are several pixels across, reducing the impact of pixelation. | In summary, retail non-UPC applications use Code 39 for its flexibility, ease of printing, and universal scanner support. The symbology's limitations are acceptable because the labels are large and the data is simple. The check digit ambiguity is a nuisance but is manageable through internal standards. The retail sector's gradual shift to QR codes for mobile coupons is happening, but Code 39 remains the default for plastic cards and in-store labels due to the installed base of scanners. | 
| Chapter 10: Limitations, Pitfalls, and When NOT to Use Code 39 | After celebrating Code 39's strengths across six industries, we must give equal attention to its limitations. No technology is perfect, and choosing Code 39 for the wrong application can lead to frustration, rework, and even safety risks. This chapter serves as a cautionary guide. | The most obvious limitation is low information density. As we have repeated, each Code 39 character requires about 15 times the narrow bar width. For a 20-character alphanumeric string (common in many serial numbers), the barcode length is around 20 * 15 * X = 300 X. At a typical X of 0.010 inches, that is 3.0 inches. Add quiet zones and the total label width is 3.5 inches. If your product label is only 1.5 inches wide, Code 39 is simply too long. You would need to use an X dimension of 0.005 inches, which requires a high-resolution printer (300 dpi or better) and a scanner with very fine optical resolution. Many low-cost scanners cannot reliably read such a small X. In these cases, Code 128 or DataMatrix are far better choices. | The second limitation is the restricted character set. Code 39 natively supports only uppercase A-Z, digits 0-9, and seven special characters: dash, period, space, dollar, slash, plus, and percent. It cannot encode lowercase letters, underscores, brackets, ampersands, or the @ symbol. If your data includes any of these, you must either use the full ASCII mode (which doubles the length and is not supported by all decoders) or switch to a different symbology. In modern supply chains where email addresses or URLs are encoded, Code 39 is practically unusable. | The third pitfall is the optional check digit. As described in logistics and retail, the lack of a mandatory check digit creates interoperability problems. If two systems have different expectations, data corruption occurs. The modulo 43 check digit itself is weak compared to modern checksums; it catches all single-character errors and most transposition errors, but it does not catch all multi-character errors. For applications that require high data integrity, such as pharmaceutical labeling, GS1 mandates a stronger check digit or a 2D code with Reed-Solomon error correction. | 
| Another issue is the lack of built-in error correction. Code 39 has no error correction - it can detect errors through self-checking and the check digit, but it cannot correct them. If a bar is partially damaged, the scanner can reject the character, but it cannot reconstruct the missing information. This is acceptable when the label is large and the scanner can attempt multiple reads, but it is problematic in high-speed sorting where the package only passes the scanner once. In such environments, 2D symbologies with error correction are superior. | The quiet zone requirement is often violated by inexperienced label designers. They think that a small margin of 1/16 inch is enough, but at an X of 0.015 inches, the required quiet zone is 0.15 inches. When the quiet zone is too small, the scanner may misinterpret the start/stop asterisk patterns, resulting in a 'no read' or a partial read. This is one of the most common causes of field failures, and it is entirely preventable by adhering to the specification. | Intercharacter gaps also present a subtle failure mode. If the printer is poorly calibrated, the gap may become as wide as a narrow space, effectively merging two adjacent characters. The scanner then sees a pattern with more than three wide elements and rejects the entire symbol. This problem is more common with older dot-matrix printers than with modern thermal printers, but it still occurs when labels are printed on-demand in remote locations. | Code 39 also has a security weakness: it is easy to forge. A counterfeiter can print a Code 39 label using any desktop printer because the symbology is publicly documented and there are no encryption or authentication features. For high-value items like pharmaceuticals or luxury goods, this is unacceptable. Many of those industries have moved to serialized 2D codes with digital signatures. |
|