Barcode Label Maker

Draw barcodes and print exact-millimetre label sheets in your browser.

Runs in your browser. Nothing is uploaded — your input is processed on this device and discarded when you close the tab.

Create your barcode label maker

GS1 warning: this tool does not assign GS1 numbers. Real retail product codes must come from GS1. Data Matrix is not offered in Wave 1 — no MIT/Apache encoder was verified in this build, and the page states that removal.

Leading zeros are kept exactly as typed. They are never stripped as a number.

Print at 100% / Actual Size. “Fit to page” breaks the exact millimetre scale.

Everything runs in your browser. Nothing you type or upload is sent to our server or logged.

How to use

  1. Pick a symbology and enter the text. Code 39 is the default in this package (Code 128 is not drawn — see Limitations). Use EAN-13, EAN-8 or UPC-A only for codes that already belong to a product, and check the check digit the tool calculates.
  2. Set the size in millimetres. X-dimension, bar height and quiet zone change the printed size measurably. Keep the quiet zone intact; a cropped quiet zone is a common reason a code will not scan.
  3. For sheets, pick a label size or a custom layout. Rows, columns, margins and gaps decide how many labels fit on a page and where each one lands. For bulk work, upload a CSV of SKU, text and quantity; leading zeros are kept exactly as typed.
  4. Print at 100% / Actual Size and measure one label with a ruler. “Fit to page” rescales the sheet and breaks the millimetre accuracy. If the ruler does not match, do not use that print.

Worked example

Load sample fills Code 39 with the fictional SKU SKU-1042. Code 39 allows only uppercase letters, digits, space and the symbols minus, dot, dollar, slash, plus and percent, so the sample is valid as typed. The tool builds the bar pattern from the published Code 39 table, with a start and stop asterisk, and the SVG export is made of vector rectangles, not a stretched raster image. For a retail example, the sample EAN-13 code 5901234123457 has a check digit of 7, calculated from its first twelve digits; entering the same twelve digits with a wrong final digit is rejected with the expected digit shown, not silently corrected.

Limitations

This tool does not assign GS1 numbers, and a code made here with a fictional or internal number is not a retail product code. Real retail codes must come from GS1. It cannot guarantee that a retailer's scanner will accept a code, and it cannot make a “Fit to page” print accurate — only a 100% print is accurate. Data Matrix is not offered in Wave 1, because no MIT or Apache encoder was verified in this build; the page states that removal plainly instead of promising a format it cannot produce. Code 128 is not drawn in this package: the JsBarcode library it was delegated to is not bundled here, so choosing Code 128 shows that limit plainly instead of drawing an unverified code. Code 39, EAN-13, EAN-8, UPC-A and ITF-14 are drawn from the built-in tables, and a printed test page at 100% scale is part of the acceptance check for every sheet layout.

How a scanner reads a label

A barcode scanner does not read numbers as a person does. It measures the widths of bars and spaces, in order, and matches that pattern against the symbology it expects. That is why exact size, contrast and quiet zone matter more than how the code looks on screen. A code stretched wider than it is tall, printed with bars that bleed into each other, or placed so close to text that the scanner cannot tell where the code ends, will fail even though the data was correct. The scanner also checks the check digit, where the symbology has one, and rejects a code whose check digit does not match, which is why the tool shows the calculated digit instead of hiding it. For sheets, the same logic applies at page level: if one label is misaligned, the next label on the sheet may also be cut or clipped, so measuring the first printed sheet with a ruler, and scanning one label from each row, catches layout errors before a whole batch is printed.

Frequently asked questions

What is a check digit?

A final digit calculated from the other digits, so a scanner can catch a misread. For EAN and UPC codes the tool calculates it and shows it; a code with a wrong check digit is rejected with the expected digit, not silently changed.

Why does the GS1 warning matter?

Because a barcode image and a registered product number are different things. Anyone can draw bars, but only GS1 can assign a retail number that shops recognise. Drawing a code does not make a product registered.

Why must I print at 100%?

Because the sheet is laid out in exact millimetres. “Fit to page” rescales the whole sheet to the printer's margins, so every label comes out a different size from the one you designed. Measure one label with a ruler after printing.

Why are leading zeros kept?

Because in a SKU, 001 and 1 are different codes. Spreadsheets often strip leading zeros when a column is treated as a number; this tool keeps SKU and text as text, exactly as typed, including in CSV uploads.

What if my code will not scan?

Check size, quiet zone, contrast and surface first: too small for the distance, cropped margin, low contrast, a curved surface, or a code stretched out of square are the usual causes. Test the printed label, not just the screen preview.

Related tools

QR Code Generator

Create QR codes for links, contacts, Wi-Fi and locations, with size and error-correction controls, and download as PNG, SVG or PDF.

Design, Print & Branding

Email Signature Generator

Create a professional email signature in table HTML with a plain-text version, in your browser.

Design, Print & Branding