Make a Code 39 barcode

Capital letters, digits and a few symbols, with the start and stop asterisks added for you.

Make a Code 39 barcode from capital letters, digits and a few symbols, with an optional check character. It is free, and what you type is not uploaded: everything runs in your browser on your device. The barcodes are drawn on this page, and after one visit and a short wait the page works offline.

Make a Code 39 barcodeor click to choose a file.

    Size, colours and options

    Type above and the barcode appears here.

    Working…

    Done

    Your files are processed on this device and never sent to a server. Reload the page to clear everything from memory.

    Code 39 is one of the oldest general-purpose barcodes. It holds capital letters, digits, space and the symbols - . $ / + %, 43 characters in all, and some older inventory, asset-tag and ID systems still ask for it by name.

    Every Code 39 barcode starts and ends with a * character. The page adds both, so type only your own text. A * inside the text is refused, because a scanner would take it for the end.

    Lowercase letters are changed to capitals as you type. This page does not use the extended version of Code 39 that spells out lowercase with pairs of characters, so anything outside the 43 characters is refused with a message that names it.

    The optional check character

    Wider than Code 128

    How it works

    1. Type capitals, digits, space or - . $ / + %. Lowercase letters become capitals.
    2. Tick Add check character only if the system that will read the barcode expects one.
    3. Save a PNG, SVG or PDF and test-scan a printed copy.

    In your browser, not on a server

    JsBarcode (MIT), a small open-source library, turns your number or text into the pattern of bars in this page. The page first checks the number against the rules of the type you chose and works out the check digit itself. The PNG is painted on a canvas by your browser, the SVG is written as plain rectangles, and the PDF is made by pdf-lib (MIT) in the tab.

    Compared with upload-based tools: The number you type may be an unreleased product or an internal asset ID. Here the barcode is drawn on your device, so the number never leaves it.

    Verify it yourself. Give the page a short while after one visit to save itself for offline use, then turn off Wi-Fi or switch to airplane mode and run the tool again. Or open your browser's developer tools (F12, or Cmd-Option-I on a Mac), pick the Network tab, and watch it while you convert. The panel above does the same count for you.

    Questions

    Do I type the asterisks?

    No. The page adds the * at the start and the end. If you type one, the page asks you to leave it out.

    Why does my scanner show an extra character at the end?

    If Add check character is ticked, the last character is the check character, and a scanner that is not set to verify it passes it on with the text. Leave the box unticked if the receiving system does not use it.

    Can I use lowercase letters?

    Not as lowercase. Code 39 has only capitals, so the page turns them into capitals and shows you the result. Use Code 128 if case has to survive.

    Should I choose Code 39 or Code 128?

    Choose Code 128 unless a customer, a form or an older system names Code 39. Code 128 holds more characters and makes a shorter barcode.

    Is what I type uploaded anywhere?

    No. The barcode is drawn by code running in this page, so the number or text you type stays on your device. After your first visit and a short wait you can turn off your internet connection and it still works.

    More image tools

    Other conversions