Barcode Generator
Generate vector (SVG) barcodes across 15 symbologies — EAN/UPC, ITF-14, SSCC-18, GS1-128, Code 39, Codabar, MSI, QR Code, Data Matrix, PDF417, Aztec, and more — with correct check digits and quiet zones, entirely in your browser.
Runs entirely in your browser — nothing is uploaded.
Batch mode — generate up to 500 at once
One value per line, up to 500. Uses the symbology and sizing settings above. Nothing leaves your browser — generation and packaging both happen locally.
Choosing a barcode symbology
"Barcode" isn't one format — it's a family of encoding schemes (symbologies), each suited to a different job. Code 128 is the general-purpose workhorse: it encodes the full ASCII character set at high density, which makes it the default choice for internal tracking numbers, serial numbers, and logistics labels where you control both the printer and the scanner. EAN-13, EAN-8,UPC-A, and UPC-E are retail symbologies — fixed-length, numeric-only, and tied to GS1's global product-numbering system that retailers' point-of-sale systems expect. ITF-14 and SSCC-18 are logistics symbologies for cases and pallets rather than individual retail units.GS1-128 carries structured GS1 Application Identifier data in one symbol — see the dedicated GS1-128 builder for constructing that data properly. Code 39, Codabar, andMSI are older general-purpose 1D symbologies still common in specific industries (Codabar in blood banks and libraries, for instance). The 2D symbologies —QR Code, Data Matrix, PDF417, andAztec Code — trade 1D's "scan from across the room" range for much higher data density in a much smaller footprint; GS1 DataMatrix is the GS1- structured variant behind Sunrise 2027 (see theGS1 Digital Link generator for the Digital-Link-URI variant of the same idea).
| Symbology | Category | Character set | Length | Check digit |
|---|---|---|---|---|
| Code 128 | General 1D | Full ASCII | Any length (practical limit ~48 characters for a scannable size) | No |
| EAN-13 | Retail | Digits only | 12 digits (check digit calculated) or 13 (verified) | Yes |
| EAN-8 | Retail | Digits only | 7 digits (check digit calculated) or 8 (verified) | Yes |
| UPC-A | Retail | Digits only | 11 digits (check digit calculated) or 12 (verified) | Yes |
| UPC-E | Retail | Digits only | 7 digits (check digit calculated) or 8 (verified) | Yes |
| ITF-14 | Logistics | Digits only | 13 digits (check digit calculated) or 14 (verified) | Yes |
| SSCC-18 | Logistics | Digits only | 17 digits (check digit calculated) or 18 (verified) | Yes |
| GS1-128 | Logistics | One or more GS1 Application Identifiers, human-readable form | e.g. (01)09506000134352(10)ABC123 | No |
| Code 39 | General 1D | Uppercase A-Z, digits, and - . $ / + % space | Any length | No |
| Codabar | General 1D | Digits, - $ : / . +, start/stop from A-D | Any length, must start and end with A, B, C, or D | No |
| MSI | General 1D | Digits only | Any length | Yes |
| QR Code | 2D | Any text or URL | Up to ~4,000 characters (numeric) or ~2,900 (text) | No |
| Data Matrix | 2D | Any text | Up to ~2,300 characters | No |
| GS1 DataMatrix | 2D | One or more GS1 Application Identifiers, human-readable form | e.g. (01)09506000134352(10)ABC123 | No |
| PDF417 | 2D | Any text | Up to ~1,100 bytes | No |
| Aztec Code | 2D | Any text | Up to ~3,000 characters | No |
What quiet zones are, and why skipping them breaks scanning
A "quiet zone" is the blank margin of empty space required immediately before and after a barcode's bars (and around all four sides of a 2D code). Scanners use that blank space to recognize where the barcode starts — without it, reads fail intermittently, often only on some scanners and not others. Quiet zone width is defined relative to the symbol's own module width, not as a fixed distance: retail (EAN/UPC) symbols need roughly 9 module widths of clear space, general 1D symbologies roughly 10, and 2D matrix symbols roughly 4 modules on every side. This tool always renders the specification-correct quiet zone; the "Highlight quiet zone" toggle draws that exact margin visually so you can see how much clear space your label design actually needs to leave.
DPI, module width, and magnification
A barcode's physical printed size is really a statement about its module width — the width of its single narrowest bar or square, in millimeters — not a pixel count, which only matters once you rasterize. For retail (EAN/UPC) symbols, GS1 defines a nominal module width (0.33mm) and expresses acceptable sizes as a percentage of it — "magnification" — typically 80% to 200%; this tool's magnification control sets the module width directly from that percentage. For every other symbology, set module width directly. Target DPI matters when you export a raster (PNG): it determines how many pixels this tool uses per module so the raster doesn't blur or alias at your intended print size — vector (SVG) output is resolution-independent and doesn't need this at all.
Vector vs. raster: why SVG is the right output for print
A raster image (PNG, JPEG) is a fixed grid of pixels — scale it up and the bars blur or alias, which is exactly the kind of edge softness that makes a scanner's decode algorithm struggle. A vector image (SVG) describes the bars as exact geometric shapes, so it prints at any size or resolution with perfectly sharp edges. For anything going to a professional printer or a print-ready PDF, vector is the correct choice; PNG is fine for on-screen use.
Check digits, briefly
EAN-13, EAN-8, UPC-A, UPC-E, ITF-14, and SSCC-18 all end in a check digit — a number calculated from the preceding digits using GS1's standard mod-10 weighting — whose only job is error detection: a mistyped or misscanned digit almost certainly won't match anymore, and the check catches it before it reaches a system that would otherwise silently accept wrong data. Enter one digit short of the full length and this tool calculates the check digit for you; enter the full length and it verifies whatever you typed, naming the expected digit if it doesn't match. Code 39 optionally supports a different scheme (mod-43, over a 42-character set including letters and symbols); MSI commonly uses the standard Luhn algorithm, though real-world MSI implementations also use mod10/mod10 and mod11/mod10 double-check-digit variants this tool doesn't implement — say so rather than silently picking one without comment.
Bar width reduction and thermal printing
Thermal transfer and direct thermal printers tend to print bars slightly wider than the digital file specifies, because heat spreads a little beyond the printhead element that applied it — a real, physical effect, not a software bug. Bar width reduction (BWR) compensates by shrinking each bar slightly in the source file so the as-printed result comes out correct; it's normally a printer-driver setting, but this tool's BWR control applies the same compensation directly to the generated 1D barcode's bar strokes, which is useful when you need the compensation baked into the file itself rather than configured per-printer. It has no effect on 2D symbols, which aren't printed as continuous bars.
Testing before committing to a print run
A barcode that looks fine on screen can still fail to scan once printed: a thermal printer with a worn printhead producing uneven bar edges, label stock with too much gloss causing scanner glare, or a module width below the reliable-scan threshold at your chosen size. Before committing to a full print run, print a single test label on the actual printer and stock you'll use in production, and scan it with the actual scanner (or scanner model) it needs to work with.
Need this inside your own system?
Label Platform does this at scale — driven directly from your data, not one label at a time.
See Label Platform →