Code 39 remains one of the most widely deployed barcode symbologies in industrial environments, from warehouse location labels to government asset tags. This guide covers what you need to know to evaluate, generate, and scan Code 39 barcodes effectively in real-world B2B operations.
Key Takeaways
- Code 39 is a standard 1D barcode symbology widely used for inventory management in non-retail environments, encoding 43 characters (A–Z, 0–9, and seven symbols) using bars and spaces.
- Code 39 does not require a check digit, although one can be added for better accuracy—MOD 43 is increasingly recommended for high-volume industrial scanning.
- The difference between Code 39 and Code 128: Code 39 is simpler and less dense, while Code 128 is more compact and preferred where label space is limited.
- Code 39 barcodes can be generated programmatically using various software tools that support barcode generation, including web and mobile applications.
- Kcosit rugged tablets and handhelds integrate Code 39 barcode scanners for warehousing, logistics, field service, and other B2B operations requiring durable mobile computing.
What is a Code 39 Barcode?
Code 39 is a linear (1D) barcode symbology introduced in 1974 and standardized for non-retail identification and tracking. Also known as “Code 3 of 9,” it remains widely used in 2026 across logistics, manufacturing, government, and healthcare applications for encoding alphanumeric data.
Each character is represented by 9 elements (5 bars and 4 spaces), with 3 wide and 6 narrow elements—giving the symbology its name. Code 39 can encode up to 43 characters, including uppercase letters A to Z, numeric digits 0–9, and a limited set of special characters (- . $ / + % and space).
You’ll encounter Code 39 on asset tags, work-in-process labels, warehouse location labels, ID badges, and maintenance records. A variety of applications for Code 39 include automotive part tracking, inventory management, and healthcare instrument tracking. Code 39 is designed to be self-checking, meaning a single printing defect won’t misinterpret one character as another valid one, which is why many legacy systems used it without any additional checksum character.

Code 39 Character Set and Variants
The standard Code 39 character set supports 43 characters: numeric digits 0–9, uppercase letters A–Z, space, and symbols -. $ / + %. While Code 39 can encode up to 43 characters, Code 128 can encode a much larger set of characters, including all 128 ASCII characters, making it more versatile for various applications.
Every Code 39 barcode must start and end with start and stop characters (the asterisk *), which are not part of the data itself. This delimiter is automatically framed when generating labels.
Extended Code 39 uses 2-character combinations to cover the full 128-character ASCII set, enabling lowercase letters and additional characters like control characters and substitution character sequences. However, Extended Code 39 requires barcode scanners and software configured to decode extended pairs—otherwise, two-character sequences will appear literally in the data stream without proper text interpretation.
For applications needing many special characters or long strings, Code 128 or 2D codes may be more efficient than Extended Code 39.
Data Capacity and Size Considerations
Code 39 is less space-efficient than newer symbologies because every character uses 9 modules plus inter-character gaps. Code 39 has a low data density, making it less suitable for very small items due to its larger physical space requirements.
Typical implementations keep data lengths modest (8–25 characters) so labels remain compact and easy to scan from handheld or vehicle-mounted devices. Code 39 can encode up to 43 characters, including uppercase letters, numeric digits, and a limited set of special characters, making it suitable for moderate-length data strings.
Key sizing factors for industrial deployments:
| Factor | Recommendation |
|---|---|
| Printer DPI | 203 DPI minimum; 300/600 for small labels |
| X-dimension | 0.2–0.5mm narrow bar width |
| Quiet zones | Minimum 10X on each side |
| Bar ratio | 2:1 or 3:1 wide-to-narrow |
When you must encode long IDs, GS1 keys, or complex strings on small labels, Code 128 or 2D symbologies are normally better choices.
Code 39 Check Digit (MOD 10 and MOD 43)
Code 39 supports optional check digits to improve read reliability, especially in harsh environments. The MOD43 check digit is an optional checksum that helps ensure accuracy when scanning barcodes.
To calculate the MOD43 check digit, each character in the barcode is assigned a numeric value (A=10 through Z=35, 0–9 retain their values, symbols 0–6), summed, and the remainder when divided by 43 is used as the check digit. Code 39 can use either a modulo 10 or a modulo 43 check digit, depending on the implementation and requirements of the barcode reader.
Using a check digit requires both the barcode generator and the scanner or software decoder to be configured consistently. Enable “check digit required” on scanners to perform calculation validation and reject invalid codes.
New industrial, logistics, and asset-tracking projects using Code 39 should enable a check digit when possible—it helps detect printing damage and partial scans, catching over 99% of errors according to ISO tests.
Using Code 39 as a Barcode Font
A barcode font is a TrueType or OpenType font that turns ordinary text in tools like MS Word or Excel into a Code 39 barcode when printed. Common font name examples include “Free 3of9” and “IDAutomation Code 39.”
To generate a Code 39 barcode using a barcode font, the data to encode must be surrounded by asterisks as start and stop characters, for example, 12345. In Excel, a simple formula wraps item numbers automatically:
- Dependence on application rendering and font installation
- Risk of incorrect font size producing unreadable bars
- Need for sufficient printer resolution (203 DPI minimum)
- No native check digit functionality without VBA or add-ins
For high-volume or automated printing in industrial workflows, dedicated label software, printer firmware, or server-side barcode libraries are usually more robust than manual font usage.

Generating and Printing Code 39 Barcodes
Several practical methods generate Code 39 barcodes: barcode fonts in office applications, desktop label software like BarTender or NiceLabel, ERP/WMS plug-ins, thermal label printer drivers with ZPL commands, and programming libraries for web integration.
When generating labels, configure:
- Data format and length standardization
- Check digit inclusion (default or optional)
- Human-readable text positioning
- Barcode height and narrow-to-wide ratio
Linear barcodes like Code 39 benefit from thermal transfer or direct thermal label printers common in warehouses. A 203 DPI printer handles most labels, while a 300/600 DPI printer improves reliability on small or high-density codes.
Include human-readable text below or above the barcode so operators can manually verify IDs if a label is damaged or a scanner fails. Standardize across sites and partners with a common data structure to ensure labels remain compatible throughout your deployment lifecycle.
Scanning Code 39 in Industrial Workflows
Virtually all 1D barcode scanners and enterprise-grade imagers support Code 39 out of the box, making it easy to implement in existing systems. Code 39 is known for its simplicity and ease of integration into existing systems without requiring complex checksums.
USB, Bluetooth, and serial scanners typically work in “keyboard wedge” mode, sending scanned data into PCs, rugged tablets, or vehicle terminals as if typed. Many scanners can be configured to require a check digit, restrict accepted lengths, or convert Extended Code 39 pairings into ASCII characters.
Implementing Code 39 allows for instant updates of inventory and sales data, facilitating better inventory control. Automating data collection with Code 39 reduces inventory count error rates from 3–5% to under 1%.
In warehouses and yards, scanners are often embedded into rugged mobile devices or vehicle-mounted computers that must withstand dust, vibration, temperature swings, and drops. Kcosit rugged tablets for warehouse management integrate 1D/2D scanning modules capable of reading Code 39 labels quickly, even on low-contrast or slightly damaged tags.

Code 39 vs Code 128: Choosing the Right Symbology
Both Code 39 and Code 128 are linear 1D barcodes widely used in non-retail environments. Code 39 was introduced in 1974, while Code 128 was developed later in 1981, making Code 39 one of the first widely used alphanumeric barcode symbologies.
| Factor | Code 39 | Code 128 |
|---|---|---|
| Character set | 43 characters | 128 ASCII characters |
| Data density | ~12mm per character | ~6mm per character |
| Check digit | Optional | Mandatory |
| GS1 support | No | Yes (GS1-128) |
| Best for | Internal labels, legacy | Shipping, supply chain |
Code 39 is often considered the standard for industrial applications, although it is being replaced by higher-density barcodes like Code 128. Code 128 is technically superior to Code 39 in most aspects, including its ability to encode a larger character set and more compactly, making it suitable for modern applications.
For applications requiring higher data density, industries often choose alternatives like Code 128 or 2D barcodes. Organizations using Kcosit devices often deploy both Code 39 for legacy internal systems and Code 128 or 2D codes for new, high-density, or standards-driven workflows.
Code 39 in Kcosit Rugged Tablet Deployments
Kcosit positions Code 39 scanning in real B2B hardware projects across logistics hubs, warehouses, production lines, field service vehicles, and construction sites by offering a range of rugged industrial computing solutions. Rugged tablets for transportation and logistics can be configured with integrated 1D/2D barcode scanners that read Code 39, Code 128, and other symbologies directly into WMS, MES, or ERP software.
Code 39 is often employed in harsh environments as it remains readable on larger labels despite conditions like dust. Kcosit rugged tablet solutions provide environmental advantages important for barcode reliability:
- IP-rated enclosures against dust and moisture
- MIL-STD-style drop resistance
- Wide operating temperature ranges (-20°C to 60°C)
- Sunlight-readable displays for outdoor scanning supporting industry-specific rugged tablet solutions
Complementary data-capture technologies in Kcosit rugged tablets and industrial devices—such as UHF RFID, NFC, and GNSS/RTK positioning—support projects evolving beyond simple Code 39 labels to mixed-identification strategies. IT and operations teams can standardize on Kcosit hardware, including handheld computers with integrated barcode scanners, to maintain consistent barcode performance across forklifts, pick carts, yard tractors, and field service vehicles using docking stations and vehicle power options.
FAQ
Is Code 39 still a good choice for new projects in 2026?
Code 39 remains suitable for many internal labeling, asset tracking, and location-marking projects where data strings are short, and label space is sufficient. Code 39 is commonly utilized for various labels, including name badges, inventory, and industrial applications. For GS1-compliant logistics labels, very long IDs, or dense data on small labels, Code 128 or 2D codes are generally a better long-term choice. Many organizations keep supporting Code 39 for legacy compatibility while introducing newer symbologies in parallel.
Do I really need a check digit on my Code 39 barcodes?
Older deployments often omitted the check digit, relying solely on Code 39’s self-checking design, but this does not catch all possible errors. In high-volume or mission-critical environments—such as automated warehouses, yard management, or field maintenance—adding a MOD 43 or MOD 10 check digit significantly improves error detection. New implementations, especially those using Kcosit rugged devices in demanding conditions, should enable a check digit unless a legacy system prevents it.
Can I mix Code 39 and Code 128 in the same facility?
Mixing is common: many scanners and software stacks can read both symbologies simultaneously with appropriate configuration. Use clear visual or color-coding differences on labels and document which systems expect which symbology. When designing a new labeling standard, determine which data types use Code 39 and which use Code 128 or 2D codes, then configure all Kcosit and fixed scanners accordingly.
What printer resolution do I need for reliable Code 39 scanning?
A 203 DPI thermal label printer is usually sufficient for standard-size Code 39 labels, provided the X-dimension and quiet zones follow industry guidelines. For very small labels, high-density codes, or extended reading distances, 300 or 600 DPI printers provide sharper bars and better scan reliability. Validate print-and-scan performance with your actual labels, scanners, and Kcosit devices before rolling out a large industrial deployment.
How do Kcosit devices handle damaged or low-contrast Code 39 labels?
Kcosit rugged tablets and handhelds equipped with modern 1D/2D imagers are designed to read Code 39 barcodes under less-than-ideal conditions, such as smudged, slightly torn, or low-contrast labels. Device ergonomics, adjustable scan aiming, high-brightness displays, and long battery life support reliable scanning across full warehouse or field-service shifts. Perform site-specific testing of label materials, printer settings, and scanner configurations with Kcosit hardware to tune performance for your environment. Contact Kcosit technical support for assistance with challenging deployment scenarios.