Barcode and QR Code Generator

Type a number or some text, pick the symbology, and get the symbol as SVG, PNG or PDF. The check digit is worked out for you, the bars are read back to prove they scan, and a pasted column becomes a sheet of labels.

Nothing you type leaves this tab. Not uploaded, not saved, no watermark.

The retail number printed on almost everything sold outside North America.

12 or 13 digits. Thirteen digits with the check digit already on the end, so the tool changes nothing.

The narrowest bar. 0.33 mm is 100 percent of the retail target.

PNG resolution

Type or paste a number and the EAN-13 appears here.

The check digit is the part people get wrong

Type twelve digits and an EAN-13 needs a thirteenth. It is not a formality. Every digit is weighted three or one, counted from the right, and the last one is whatever makes the total land on a multiple of ten. That is what stops a scanner from accepting a number where two digits got swapped.

This page works it out and shows you which digit it added. Paste a full number that already carries one and has the wrong one, and the page names the digit it expected instead of quietly drawing the barcode for a different product.

It reads the symbol back before you print it

Drawing bars is easy. Drawing the right bars is the part that ruins a print run. So every barcode here goes through a second piece of code that knows nothing about how it was drawn. That code reads the bars the way a scanner would, recovers the digits, and checks them against what you typed. On an EAN-13 that means pulling the thirteenth digit back out of the left half parities, which is where a hand written encoder usually goes wrong.

If the two disagree, you see that instead of a barcode. The QR code gets the same treatment in the test suite, from a decoder written apart from the encoder, rather than on the page.

The size it will actually print at

A barcode is a physical object, and most generators hand you a PNG with no idea what size it is. Pick an X dimension here, which is the width of the narrowest bar, and the page gives you the millimetres, the inches, and how many dots that comes to at 203 and at 300 dpi. Those are the two resolutions label printers actually run at.

At the retail target of 0.330 mm an EAN-13 is 31.35 mm of bars, with 3.63 mm of quiet zone on the left and 2.31 mm on the right. Those figures are GS1's own, off their dimension table. Go outside the 80 to 200 percent range that table allows and the page says which way you went and by how much. It still draws the symbol, because a carton label is not a supermarket shelf. You just find out before the printer does.

The quiet zone is on by default. Cropping the white space either side is one of the first things to check when a printed barcode will not scan, because that space is part of the symbol rather than a margin around it.

A whole sheet of labels in one PDF

Paste a column out of a spreadsheet, drop a CSV, or type 1000-1050 and get the whole range. Pick your label stock, Avery 5160, 5163, 5167, L7160 or L7651, and download one PDF with every code in its slot.

The PDF is vector. Every bar is a drawn rectangle rather than a picture of one, so it stays sharp at any size and a label printer rips it properly. Working from a part used sheet, tell it which slot to start at and it skips the ones you already peeled off. If you end up with several sheets to send as one file, Merge PDF stitches them in the tab.

Leading zeros survive all of it. 0071234 goes in and 0071234 comes out.

Where the number itself has to come from

People find this out too late, so here it is plainly. Making a UPC or an EAN symbol here does not register that number to you. GS1 issues company prefixes, and GS1 US says the prefix "identifies you as the owner of the brand" and that partners "often require UPC barcodes that come specifically from GS1". If the number is not yours, they warn, "you may risk rejection, or worse, you may incur additional costs to relabel your products".

Bring a number you already own and this page will draw it correctly. For an internal SKU or a shelf tag, anything only your own scanner has to read, use Code 128 and no licence comes into it.

Nothing is uploaded

The encoders run in this tab. There is no server in the picture, nothing to sign into, and no watermark on anything you download. What you type never leaves the browser and never becomes an analytics property. Mixpanel and Google Analytics see that a barcode was made, which symbology it was, and which button got pressed. If the values you are about to encode are sitting in a spreadsheet, the CSV Viewer and Editor will open it without turning 0071234 into 71234 on the way in.

Common questions

Does this give me a UPC I can sell a product with?

No. It draws the symbol for a number. The number has to come from GS1, who issue the company prefix that makes it yours. GS1 US puts it plainly: retailers and marketplaces "often require UPC barcodes that come specifically from GS1", and if a code is not registered to you "you may risk rejection, or worse, you may incur additional costs to relabel your products". For an internal SKU or a shelf tag none of that applies, and Code 128 is the one to use.

Which one should I pick?

EAN-13 for a retail product almost anywhere, UPC-A for one sold in the United States or Canada, ITF-14 for the outer shipping carton, Code 128 for anything internal such as a SKU, a bin or an asset tag, Code 39 when an older system asks for it by name, and QR when a phone camera has to read it.

Why will my barcode not scan?

Check the white space first. The quiet zone either side is part of the symbol, and cropping it is a common cause. After that it is size: below about 80 percent of the retail target the bars get narrower than the printer can hold. This page keeps the quiet zone on unless you turn it off, and it tells you the printed width in millimetres and in printer dots before you commit.

Can I make a whole sheet at once?

Yes. Paste a column, drop a CSV or type a numeric range, pick your label stock, and download a single vector PDF with every code in its slot. Tell it which slot to start at if the sheet is part used.

Looking for something else?