30+ symbologies with automatic check digits, batch generation and printable label sheets. Export PNG · SVG · JPG up to 600 dpi. Everything runs in your browser — nothing is uploaded, nothing is stored.
This is a complete barcode maker that runs in your browser. It covers the retail family (EAN-13, EAN-8, UPC-A, UPC-E and the EAN-5 / EAN-2 add-ons), the logistics workhorses (Code 128, GS1-128, ITF-14, Code 39, Code 93, Codabar, MSI), pharmaceutical codes (Pharmacode, Code 32), the GS1 DataBar family, the 2D codes (Data Matrix, GS1 Data Matrix, QR, PDF417, Aztec) and the four-state postal symbologies used by USPS, Royal Mail, PostNL, Australia Post and Japan Post.
Check digits are calculated and verified for you, so a 12-digit product number becomes a valid EAN-13 without you reaching for a calculator. Beyond single codes there is a batch mode that turns a pasted list into hundreds of barcodes and hands them back as a ZIP, and a label sheet mode that lays them out on A4 or Letter for printing. Exports are PNG, SVG (vector, for print) and JPG, at up to 600 dpi.
Everything happens in this tab. Product numbers, batch codes, patient identifiers and asset tags are encoded on your own device — there is no upload, no account, no watermark and no daily limit, which makes it a practical alternative to the cloud barcode services when the data is confidential.
| Symbology | Encodes | Length | Check digit | Typical use |
|---|---|---|---|---|
| EAN-13 | Digits | 13 | Yes, mandatory | Retail products worldwide |
| UPC-A | Digits | 12 | Yes, mandatory | Retail in the US and Canada |
| EAN-8 | Digits | 8 | Yes, mandatory | Small retail packs |
| UPC-E | Digits | 6–8 | Yes, mandatory | Very small retail items |
| ITF-14 | Digits | 14 | Yes, mandatory | Shipping cartons and cases |
| Code 128 | Full ASCII | Variable | Yes, built in | Logistics, asset tags, internal labels |
| GS1-128 | ASCII + AIs | Variable | Yes, built in | Pallet and case labels with batch, expiry, serial |
| Code 39 | Capitals, digits, - . $ / + % | Variable | Optional (mod 43) | Legacy industrial and government systems |
| Code 93 | Full ASCII | Variable | Yes, two characters | Denser replacement for Code 39 |
| Codabar | Digits, - $ : / . + | Variable | Optional | Libraries, blood banks, photo labs |
| ITF | Digits | Even number | Optional | Cartons and internal numeric systems |
| MSI / Plessey | Digits | Variable | Mod 10 / mod 11 variants | Shelf-edge inventory labels |
| Pharmacode | Number 3–131070 | — | No | Pharmaceutical packaging control |
| GS1 DataBar | GTIN (+ AIs when expanded) | Variable | Yes | Loose produce, small healthcare items, coupons |
| Data Matrix | Full ASCII / UTF-8 | Up to ~2,300 chars | Reed–Solomon | Direct part marking, healthcare packs |
| PDF417 | Full ASCII / binary | Up to ~1,800 chars | Reed–Solomon | Driving licences, boarding passes |
| Aztec | Full ASCII / binary | Up to ~3,000 chars | Reed–Solomon | Rail and airline tickets |
It turns a number or a piece of text into a scannable barcode image, in your browser. Pick a symbology, type the data, adjust size and colours, and download a PNG, an SVG or a JPG — or generate hundreds at once from a list and get them back as a ZIP. Nothing is uploaded and no account is needed.
Two questions decide it almost every time. Is it going to be scanned at a shop till? Then you need EAN-13 (or UPC-A in North America) and a GS1-issued number. Is it for your own internal use — asset tags, shelf labels, work orders, warehouse bins? Then Code 128, which takes letters and digits, is the right default. Everything else on the list is a special case of one of those two.
Completely free, with no account, no watermark on the output and no daily cap. Batch generation is limited only by your device's patience — a few hundred codes render in a couple of seconds.
No. It is one web page. The barcode engine runs in your browser, so there is nothing to install, no extension and no sign-up. Advanced symbologies load a second engine on demand, once, and then stay available.
After the page and its engine have loaded, yes — generating, previewing and downloading all happen locally with no network traffic. The first load needs a connection, and so does the first use of an advanced symbology, because that engine is fetched only when you ask for it.
The images are yours to use however you like — there is no licence attached to the output and no watermark. What is not free is the right to a particular number: a retail GTIN has to be licensed from GS1. Generating the symbol is free; owning the identifier is a separate matter.
Code 128 encodes the full ASCII set, is much denser, and carries a mandatory check character — it is the modern default for logistics and internal labelling. Code 39 is older, encodes only digits, capital letters and a handful of symbols, and produces a symbol roughly 30–50% wider for the same data. Use Code 39 only when something in your chain explicitly requires it; otherwise use Code 128.
They are the same system. UPC-A is 12 digits and is the North American form; EAN-13 is 13 digits and is used everywhere. A UPC-A is simply an EAN-13 with a leading zero, and modern scanners read both. If you sell internationally, use EAN-13; if your market is strictly US/Canada retail, UPC-A is still conventional.
Same bars, extra rules. GS1-128 is Code 128 with an FNC1 character at the start and data structured into Application Identifiers — (01) for the GTIN, (17) for an expiry date, (10) for a batch, (21) for a serial. That is what lets a receiving system know that the digits it just read are an expiry date rather than a weight. Plain Code 128 carries no such meaning.
Shipping cartons and cases. ITF-14 encodes a 14-digit GTIN and is designed to survive printing straight onto corrugated cardboard, where finer symbologies smear. It is normally surrounded by a thick bearer bar, which stops a scanner reading a partial symbol at an angle. It is not a retail POS symbol — the individual item still needs its own EAN-13 or UPC.
For numeric-only data where you control both ends of the chain, or where a legacy system demands it. ITF encodes digits in pairs, so the data length must be even — an odd number of digits gets a leading zero added. It is compact but has no built-in check character unless you add one, which is why ITF-14 (its fixed-length, checked cousin) is preferred for cartons.
Libraries, blood banks, photo labs and some courier systems. It encodes digits and a few symbols, uses letters A, B, C or D as start and stop characters, and survives poor printing well. It persists mostly because replacing the scanners and the millions of existing labels would cost more than keeping it.
A pharmaceutical packaging control code (Laetus) that encodes a number from 3 to 131070. It is deliberately minimal and is read at very high speed on packaging lines to confirm the right leaflet or carton is being used. It carries no check digit and is not meant to be read by a general-purpose scanner.
An older numeric symbology still found on retail shelf-edge labels for inventory control. Its distinguishing feature is the choice of check digit schemes — mod 10, mod 11, or a double check digit — which is why you will see MSI10, MSI11, MSI1010 and MSI1110 offered separately. Pick whichever your existing system expects.
A denser, more secure successor to Code 39, with two check characters and full ASCII support through shift characters. It is used in some logistics and Canadian postal applications. It is offered here through the advanced engine, which loads on demand.
A family of compact GS1 symbols designed for things EAN-13 cannot fit on or fully describe — loose produce, small healthcare items, coupons. DataBar Expanded can additionally carry Application Identifiers such as weight and expiry date, which is why supermarket fresh-food labels use it. All POS scanners installed since 2010 are expected to read it.
If you need to store more than about twenty characters, or you are marking something tiny, yes. Data Matrix is the standard for direct part marking and healthcare (a GS1 Data Matrix on a medicine box carries GTIN, batch and expiry in a few millimetres). PDF417 is what is on the back of most driving licences and boarding passes. QR is the consumer-facing one — if that is what you want, the dedicated QR code generator gives you more control over it.
Among the 1D codes here, Code 128 is the densest for mixed text and PDF417 stores far more than any of them by stacking rows. If you are pushing more than roughly 20–30 characters into a linear barcode, the symbol becomes impractically wide and a 2D code is the correct answer rather than a workaround.
For anything scanned at a retail till, effectively yes. The number itself — the GTIN — is licensed from GS1, and retailers verify that the company prefix belongs to you. For internal use of any kind, no: warehouse labels, asset tags, event tickets and library codes need no registration at all, and this tool is perfectly suited to those.
You can generate a technically valid symbol from any 13 digits, and it will scan. What it will not be is yours — the number may already belong to another company, and most retailers reject products whose prefix does not resolve to the seller. Made-up numbers are fine for testing, mock-ups and internal use, and a bad idea on anything you intend to sell through a shop.
They are the GS1 prefix, which identifies the issuing GS1 member organisation — not, as the myth goes, the country of manufacture. 50 is GS1 UK, 40–44 is Germany, 30–37 is France, 54 is Belgium and Luxembourg, 00–13 is the United States and Canada. A product made in Vietnam can perfectly legitimately carry a prefix issued in the UK.
Take the 13-digit ISBN (it already starts with the Bookland prefix 978 or 979), strip the hyphens, and generate it as an EAN-13. If the price needs to appear as the small add-on symbol to the right, generate an EAN-5 alongside it — the first digit is the currency code, the remaining four the price. The advanced engine also offers a dedicated isbn symbology that renders the human-readable ISBN above the bars.
Periodicals use ISSN, encoded as an EAN-13 behind the prefix 977, usually with an EAN-2 add-on carrying the issue number. Printed music uses ISMN, which sits behind 979-0. Both are EAN-13 symbols once the prefix is in place.
A compressed UPC-A. Through a fixed set of zero-suppression rules, certain 12-digit UPC-A numbers can be expressed in 8 digits, producing a symbol small enough for a can of drink or a lip balm. It is not a separate numbering system — the scanner expands it back to the full UPC-A before looking it up.
Each distinct sellable variant needs its own GTIN — a different size, colour or multipack is a different product as far as the till is concerned. The same physical item can, however, carry several symbols: an EAN-13 for the consumer unit, an ITF-14 on the outer case, and a GS1-128 on the pallet label carrying batch and expiry.
It is a digit computed from all the others so a scanner can tell whether it read the symbol correctly. This tool handles it for you: type 12 digits for an EAN-13 and it calculates the 13th, and the same applies to EAN-8, UPC-A and ITF-14. Paste all 13 and it verifies the one you supplied instead, and tells you if it disagrees.
Multiply the digits alternately by 1 and 3 from the left (1, 3, 1, 3…), add the results, then subtract that total from the next multiple of ten. For 590123412345 the sum is 60, so the check digit is 0. UPC-A and EAN-8 use the same alternating scheme with the weights starting differently — which is why a UPC-A is not simply an EAN-13 with a digit removed.
Every symbology has rules, and the validator names the one you broke: EAN-13 needs exactly 12 or 13 digits, EAN-8 needs 7 or 8, UPC-A 11 or 12, ITF-14 13 or 14, ITF an even number of digits, Codabar must start and end with A, B, C or D, and Pharmacode must be a number between 3 and 131070. Code 128 and Code 39 are the forgiving ones — Code 39 accepts capitals, digits and - . $ / + % space, and Code 128 accepts essentially any ASCII.
In Code 128, yes — the full ASCII range, upper and lower case, punctuation included. Code 39 takes capitals and digits only. Every EAN/UPC symbology is strictly numeric and fixed length, as is ITF, MSI and Pharmacode. If a letter must be in the code, Code 128 is almost always the answer.
Spaces are fine in Code 128 and Code 39. Accented characters and emoji are not: linear symbologies encode bytes from a limited set, not Unicode. If you need to carry arbitrary text, use a 2D code — Data Matrix and QR handle UTF-8 properly.
There is no hard limit in Code 128, but there is a practical one: every character adds width, and past roughly 20–25 characters the symbol gets too wide to print or scan comfortably. Fixed-length symbologies (EAN, UPC, ITF-14) accept exactly what their standard specifies and nothing else.
GS1-128 uses FNC1 as a start marker and as a separator after any variable-length Application Identifier. They are functional characters, not printable ones, which is why the human-readable line shows (01) style brackets while the encoded data contains no brackets at all — the brackets are for people, the FNC1 is for the scanner.
For EAN-13 at 100% magnification the symbol is 31.35 mm wide by 22.85 mm tall, built on an X-dimension (narrowest bar) of 0.330 mm. GS1 allows retail point-of-sale symbols to be scaled between 80% and 200% — an X-dimension of 0.264 mm to 0.660 mm, or roughly 25 mm to 63 mm wide. Below 80% you are outside the standard and rejection at a retailer's verification step becomes a real risk.
It is the width of the narrowest bar, and it is the single number that decides whether a symbol scans. Everything else — total width, quiet zones, recommended height — is expressed as a multiple of it. Print below the X-dimension your scanners can resolve and the symbol fails no matter how sharp the printer is.
The blank margin either side of the bars, without which a scanner cannot find the symbol's edges. EAN-13 needs 11X on the left and 7X on the right — 3.63 mm and 2.31 mm at 100%. Code 128 wants at least 10X on both sides. This is the most common reason a beautifully printed barcode refuses to scan: someone cropped it tight or put a border round it.
For print, export the SVG — it is resolution-independent and scales to any size without softening the bar edges. If you need a raster, use the 300 dpi option; 300 dpi is the practical minimum for a printed barcode, and 600 dpi is better on a thermal label printer. For anything that will only be shown on a screen, 1× or 2× PNG is plenty.
SVG for print and for anything that will be resized. PNG for screens, documents and email — it is lossless, so bar edges stay crisp. JPG only when something forces you to: JPEG compression blurs high-contrast edges, which is exactly what a barcode is made of. It is offered for compatibility, not because it is a good idea.
Yes, for internal use — a 600 dpi laser printer produces perfectly scannable Code 128 and EAN-13 at normal sizes. Two cautions: print at 100% scale with any "fit to page" option switched off, and use plain white paper rather than glossy, because reflections defeat laser scanners.
Only carefully. Scanners read contrast, and most read in the red part of the spectrum, where red bars look almost white. Black on white is the only truly safe combination; dark blue or dark green on white generally works; red, orange or yellow bars do not scan, and neither does anything on a dark background. If you invert the colours here for a design mock-up, do not send that version to print.
Tall enough to survive a scanner crossing them at an angle. The EAN-13 standard height at 100% is 22.85 mm, and truncating bars to save space — a habit borrowed from graphic design — measurably raises the failure rate at a busy till. For internal labels you can go shorter, since staff can align a handheld scanner deliberately.
Usually, with two caveats. Camera-based scanners handle screens fine; older laser scanners often cannot, because the screen's own light interferes with the reflected beam. Turn the brightness up and disable any blue-light or night filter, which tints the white background and kills contrast.
Yes — that is what the Batch tab is for. Paste one value per line, or value,label pairs, and every valid row is rendered. You can then download the whole set as a ZIP of PNGs or SVGs, with each file named after its data.
The Label sheet tab lays your codes out on an A4 or Letter page in a grid you choose — columns, rows and margins — and prints with one click. Set your browser's print dialog to 100% scale and no "fit to page", or every barcode on the sheet will be silently resized.
Set the grid to match the sheet's layout and adjust the page margins until the preview lines up with your labels. Print one page on plain paper first and hold it against the label sheet — it takes thirty seconds and saves a sheet of labels.
They are flagged rather than silently skipped: the row is listed with the reason it failed, and the valid rows still render and download. That way a single typo in a list of 300 does not cost you the whole run.
Your last generated codes are kept in the browser's history strip, and clicking one restores its symbology, data and styling. Presets for the common jobs — retail item, shipping carton, asset tag, book — are one click away above the data field.
No. The barcode is drawn in your browser, on your device. Product numbers, batch codes, patient identifiers, asset tags — none of it is transmitted, logged or stored anywhere. The only network requests the page makes are for its own code, and you can watch that in your browser's Network tab while you generate.
Only your recent generations, kept in this browser's local storage so the history strip survives a reload, plus your theme choice. Clearing site data wipes both. Nothing is associated with an account, because there is no account.
Nothing leaves your device, which is exactly why local generation suits pharmacy batch numbers, patient wristbands, evidence labels and internal asset registers. Your own policy still governs what you may put on a label — but there is no upload to disclose in a data-protection assessment.
Two, chosen automatically. The common 1D symbologies use JsBarcode, which is tiny and loads with the page. Advanced symbologies — Code 93, GS1 DataBar, Data Matrix, PDF417, Aztec, postal codes — use bwip-js, a JavaScript port of Barcode Writer in Pure PostScript, which is fetched only when you select one of them so the page stays fast for everyone else.
The encoding is: both engines implement the published symbology specifications, including check characters and encoding modes. What a tool cannot do for you is guarantee the print is compliant — that depends on your printer, substrate and ink, which is what barcode verification equipment measures. For retail supply, have a physical sample verified before a production run.
Yes. The layout adapts, and generating, previewing and downloading all work on iOS and Android. Scanning a code straight off your own phone screen is the awkward case — you need a second device to test with.
In order: quiet zones (is there clear white space either side?), size (is it printed at least at the standard X-dimension?), contrast (dark bars on a white background, never red), print quality (are bars sharp, or smudged and filled in?), and the right symbology (a scanner configured for retail EAN may simply ignore Code 39). Nine failures out of ten are the first two.
That is nearly always a check-digit or format mismatch: a UPC-A read by a scanner set to emit EAN-13 gains a leading zero, and a UPC-E is silently expanded to its full 12-digit UPC-A. Both are correct behaviour by the scanner. Check what your system expects to receive before assuming the symbol is wrong.
Retailers verify to ISO/IEC 15416, which grades far more than "does it scan once" — edge contrast, decodability, modulation and defects all get a score. The usual culprits are printing below 80% magnification, ink spread on absorbent packaging making bars too wide, and quiet zones eaten by artwork. Order a verification report rather than guessing.
You exported a raster at screen resolution and scaled it up. Download the SVG instead and place that in your artwork — it stays sharp at any size — or re-export the PNG at 300 dpi if the software you are pasting into cannot take vectors.
Reduce the font size or increase the text margin in the options, and check the symbol is wide enough for the number underneath it. On very narrow symbols — EAN-8, UPC-E, short Code 128 — the default 20px text can be wider than the bars themselves.
That engine loads on demand, so it needs a connection the first time you select one of those formats. If the page is offline, or a corporate proxy blocks the CDN, the advanced list will not draw while the built-in symbologies keep working normally.
They are in the list — under the advanced group, which is served by the second engine. The built-in engine deliberately covers only the symbologies it implements correctly rather than falling back to a generic pattern that looks like a barcode and scans as nothing.
Part of a collection of free, no-signup browser tools. A few that pair well with the barcode generator: