Code 128 vs Code 93: Choosing the Right Alphanumeric Barcode
Compare Code 128 and Code 93 barcodes in density, character sets, error checking, and industry use. Learn which alphanumeric barcode format fits your application.
Code 128 and Code 93 are both linear barcode formats that encode alphanumeric data. Both handle the full ASCII character set. Both were developed as improvements over Code 39. But they took different approaches to the same problem — and the market chose one over the other. Code 128 became the global standard for shipping, logistics, and supply chain barcodes. Code 93 found a niche in Canadian postal services and a few specialized applications. Here's why, and whether Code 93 might still be the right choice for your use case.
Quick Comparison
| Feature | Code 128 | Code 93 |
|---|---|---|
| Year introduced | 1981 | 1982 |
| Character set | Full ASCII (128 characters, native) | 43 base + full ASCII via shift characters |
| Encoding | 3 bars, 3 spaces (11 modules per character) | 3 bars, 3 spaces (9 modules per character) |
| Check characters | 1 mandatory (modulo 103) | 2 mandatory (modulo 47) |
| Self-checking | No | No |
| Numeric mode | Double-density (Code C subset) | Same density as alpha |
| Lowercase | Native (Code B subset) | Extended mode only (doubled length) |
| GS1 variant | GS1-128 | None |
| Industry adoption | Universal | Niche (Canada Post, some libraries) |
| Scanner default | Enabled on all scanners | Often needs manual activation |
Density: A Nuanced Comparison
At first glance, Code 93 looks denser: each character uses 9 modules versus Code 128's 11. But real-world density depends on the data:
Alphanumeric Data (A-Z, 0-9)
Code 93 wins by about 15%. A 10-character alphanumeric string produces:
- Code 93: approximately 120 modules total
- Code 128: approximately 140 modules total
This makes Code 93 the more compact choice for uppercase alphanumeric data with no special characters.
Numeric-Only Data
Code 128 wins decisively. Its Code C subset encodes two digits per symbol character, effectively halving the barcode width for numeric strings:
- Code 93: 10 digits = 10 characters = ~110 modules
- Code 128 (Code C): 10 digits = 5 characters = ~75 modules
For numeric data (serial numbers, phone numbers, dates), Code 128 produces barcodes 30-40% narrower than Code 93.
Mixed Data with Lowercase
Code 128 wins. Its Code B subset encodes lowercase letters natively — one symbol character per lowercase letter. Code 93's Extended mode pairs two characters for each lowercase letter, doubling the barcode width for those characters.
A string like Order-abc123:
- Code 128: Encodes directly using Code B for lowercase, Code C for the numeric run
- Code 93: Extended mode doubles the width for
a,b, andc
Bottom Line on Density
Code 93 is narrower for pure uppercase alphanumeric data. Code 128 is narrower for numeric data and any data with lowercase characters. Since most modern applications use mixed case or numeric data, Code 128's density advantage is more common in practice.
Error Detection: Code 93's Advantage
This is where Code 93 has a genuine technical advantage:
Code 128: One Check Character
Code 128 uses a single modulo 103 check character. This detects:
- Single character substitution errors
- Most transposition errors
- Most insertion/deletion errors
One check character provides good but not infallible protection.
Code 93: Two Check Characters
Code 93 uses two independent check characters (modulo 47 each), calculated differently:
- Check C: Weighted sum from right to left, weights cycling 1-20
- Check K: Weighted sum from right to left (including Check C), weights cycling 1-15
Two independent check characters provide significantly stronger error detection:
- Catches virtually all single and double substitution errors
- Catches all transposition errors
- Catches most insertion and deletion errors
Does This Matter in Practice?
For most applications, one check character (Code 128) is sufficient. Modern print quality and scanner technology make barcode errors extremely rare. The extra protection of Code 93's dual check characters matters in high-reliability environments — which is why postal services value it. Mail sorting systems process millions of barcodes daily at high speed, and even a tiny error rate is significant at that volume.
Character Encoding Approaches
Code 128's Three Subsets
Code 128 uses three switchable code subsets:
- Code A: Uppercase, digits, control characters (ASCII 0-95)
- Code B: Uppercase, lowercase, digits, symbols (ASCII 32-127)
- Code C: Numeric pairs (00-99, two digits per symbol)
The encoder switches between subsets automatically to minimize barcode width. This is transparent — you enter the data and the generator handles subset optimization.
Code 93's Single Encoding + Shift Characters
Code 93 encodes 43 characters natively (same as Code 39): A-Z, 0-9, space, and seven special characters (- . $ / + % and an unmarked delimiter).
For the remaining ASCII characters (lowercase, additional symbols, control characters), Code 93 uses four shift characters. Each shift character is a full symbol-width prefix, so every extended character occupies two symbol positions in the barcode.
Practical Implications
If your data is uppercase alphanumeric only, both formats work equally well. The moment you need lowercase letters, special symbols, or control characters, Code 128 handles them with no width penalty while Code 93 doubles in width for each extended character.
Industry Adoption
Code 128 Is Everywhere
- GS1-128 — the global supply chain standard — is built on Code 128. This alone makes Code 128 the default for logistics, shipping, and retail supply chains
- FedEx, UPS, USPS, DHL — all use Code 128 for shipping label barcodes
- ISBT 128 — blood banking standard
- Inventory and warehouse systems — Code 128 is the standard for inventory barcodes
- Library and document management — many systems default to Code 128
Code 93's Limited Adoption
- Canada Post — the primary adopter, using Code 93 for postal code encoding on mail pieces
- Some library systems — for internal circulation barcodes
- Legacy installations — systems deployed when Code 93 was being actively promoted
The adoption gap is self-reinforcing: because Code 128 is everywhere, new systems choose Code 128, which makes Code 128 even more universal. Unless you're interfacing with Canada Post or a system that specifically requires Code 93, Code 128 is the practical choice.
Scanner Compatibility
Both formats are supported by modern barcode scanners, but with a practical difference:
Code 128 is enabled by default on virtually every barcode scanner. Plug in the scanner and it reads Code 128 immediately.
Code 93 may need to be enabled manually in scanner configuration. Many scanners ship with Code 93 disabled because of its limited use. If you deploy Code 93 barcodes, verify that every scanner in your workflow has Code 93 enabled — including barcode scanner apps and web-based scanners used for troubleshooting.
Decision Guide
Choose Code 128 When:
- Starting a new system — Code 128 is the default choice for new implementations
- Supply chain or logistics — GS1-128 is the standard, and it's built on Code 128
- Mixed or numeric data — Code 128's Code C subset provides double-density numeric encoding
- Lowercase characters needed — Code 128 handles them natively
- Broad scanner compatibility — Code 128 works on every scanner without configuration
- Interoperability — partners, carriers, and vendors all expect Code 128
Choose Code 93 When:
- Canada Post compliance — Canada Post requires Code 93 for postal barcodes
- Your existing system uses it — switching costs may exceed benefits
- Uppercase alphanumeric data with maximum density — Code 93 is ~15% narrower for pure uppercase text
- Maximum error detection is critical — dual check characters provide stronger protection than Code 128's single check
Migrating from Code 93 to Code 128
If you're on Code 93 and considering a switch:
- All modern scanners support both formats simultaneously — you can migrate gradually
- Data content doesn't change — the same text encodes in both formats
- Print the same data as both Code 93 and Code 128, scan both to verify identical output
- The main work is updating label templates and barcode generation software
Generating Barcodes
Create barcodes in either format with our free generators:
- Code 128 Generator — enter any text and download
- Code 93 Generator — enter uppercase alphanumeric data
Both generators handle check character calculation automatically. Download as SVG, PNG, or PDF.
Related Guides
- Code 128 Complete Guide — full technical reference for Code 128
- Code 93 Complete Guide — full technical reference for Code 93
- Code 128 vs Code 39 — comparing the two most widely used linear formats
- GS1-128 Complete Guide — the supply chain standard built on Code 128
- Choosing the Right Barcode Type — decision guide across all formats
- How to Create Inventory Barcodes — setting up barcode-based inventory tracking