Skip to content
ALL DEVELOPER TOOLS56
JSON FormatterTXT → JSONJSON to CSVJSON → CSVCSV to JSONCSV → JSONSQL FormatterSQL → SQLMarkdown to HTMLMD → HTMLHTML to MarkdownHTML → MDXML FormatterXML → XMLBase64 Encode/DecodeTXT → B64URL Encode/DecodeTXT → URLJWT DecoderJWT → JSONHTML Entity Encode/DecodeTXT → HTMLUUID Generator— → UUIDPassword Generator— → TXTHash GeneratorTXT → HASHLorem Ipsum Generator— → TXTQR Code GeneratorTXT → PNGColor Picker & Converter— → HEXCSS Gradient Generator— → CSSBox Shadow Generator— → CSSRegex TesterTXT → MATCHCron Expression GeneratorTXT → CRONTimestamp ConverterNUM → DATEText DiffTXT → DIFFText Case ConverterTXT → TXTWord CounterTXT → STATSSubtitle ConverterSUBS → SRT · VTT · ASSYAML to JSONYAML → JSONJSON to YAMLJSON → YAMLYAML FormatterYAML → YAMLJSON MinifyJSON → JSONSort & Dedupe LinesTXT → TXTLine Ending ConverterTXT → CRLF · LF · CRXLSX to CSVXLSX → CSVCharset ConverterTEXT → UTF-8HAR ViewerHAR → TABLE · HARJWT EncoderJSON → JWTHMAC GeneratorTXT → MACFile ChecksumFILE → VERDICTWi-Fi QR Code Generator— → QRChmod CalculatorOCTAL → RWXHTTP Status CodesCODE → MEANINGByte ConverterSIZE → UNITSTime Zone ConverterTIME → ZONESAspect Ratio CalculatorSIZE → RATIOURL ParserURL → PARTSExtract ArchiveARCHIVE → FILES · ZIPCreate ZIPFILES → ZIPUnzip FilesZIP → FILESDOCX to MarkdownDOCX → MDSVG OptimizerSVG → SVGBarcode Generator— → BARCODEQR Code ReaderIMG → TEXTVCF to CSVVCF → CSVICS to CSVICS → CSVCSV to Markdown TableCSV → MDBcrypt Generator— → HASH
ENGINE BWIP-JSACCEPTS NONE

Barcode Generator

BWIP-JSTOOL 170 OF 190

Barcode Generator — Code 128, EAN, UPC, QR and More

Eleven symbologies, each checked against its own rules before a single bar is drawn, and nothing leaves this tab.

ENGINEBWIP-JS
ACCEPTSNONE
MAX SIZENONE
UPLOADNEVER
01Choose a SYMBOLOGY — Code 128 for text, EAN-13 or UPC-A for retail, QR Code or Data Matrix for anything longer.
02Type the value; the block beneath the pane prints what a scanner reads back, check digit and all.
03Click Generate Barcode, then Download SVG or Download PNG.

About Barcode Generator

A barcode is a picture of a number, and the only thing that matters about it is that the number a scanner reads is the number you meant. This page builds eleven symbologies with BWIPP, the Barcode Writer in Pure PostScript project, compiled to JavaScript and drawn as an SVG in your own tab. Nothing is uploaded, which matters when the number on the label belongs to a product you have not announced. The validation is the point. EAN-13 wants twelve or thirteen digits, UPC-A eleven or twelve, ITF-14 thirteen or fourteen, and a check digit that does not match is refused with the digit it should have been rather than drawn anyway. Where a symbology transforms what you typed, the page prints the result before you generate anything: a twelve-digit EAN-13 gains its computed check digit, a UPC-E is expanded into the UPC-A it compresses so seven typed digits become twelve, and a UPC symbol is printed both ways — the twelve digits under its bars, and the thirteen-digit EAN-13, leading zero and all, that a software reader hands back for the very same symbol. Code 128 and Code 39 refuse accented characters, because they carry bytes rather than characters and a scanner would faithfully report mojibake.

Questions

The barcode I made scans as a different number from the one I typed.

That is usually the symbology doing its job rather than a fault. Three of them change the number on purpose. Give EAN-13 twelve digits and it computes the thirteenth, the check digit, and that is what a scanner reports. A UPC-A is the subset of EAN-13 whose first digit is zero, so readers disagree about it: a till scanner usually sends the twelve digits printed under the bars, while a software reader hands back thirteen with a leading zero attached — this site's own included, which is why the page prints both. And UPC-E is not a short barcode at all but a shorthand: the last digit before the check digit selects one of five rules for putting a run of zeroes back, so the seven digits 0123456 scan as the twelve-digit UPC-A 012345000065. The page works all of this out as you type and prints the decoded value on screen — both of them, for a UPC — so you find out here rather than on a pallet.

Why does it refuse my EAN-13 when I copied the number off the packet?

Because one digit is wrong somewhere and the check digit proves it. The last digit of an EAN, UPC or ITF-14 number is not data — it is a weighted sum of the digits before it, designed so that a single mistyped or transposed digit fails the sum. When the number you paste does not check out, the tool says which digit it should have been instead of drawing a barcode for a product that does not exist. If you only have the first twelve digits, paste those: give it twelve and the thirteenth is computed for you and shown before you generate. The commonest cause is a digit dropped from a long number.

Can I put an accent or an emoji into a Code 128?

No, and this page refuses rather than drawing one that scans wrong. Code 128 and Code 39 carry bytes, not characters, and the alphabet they are defined over stops at ASCII. A generator handed “héllo” writes the UTF-8 bytes for it; a scanner following the specification reads those bytes back as Latin-1 and reports “héllo”. That was measured by decoding this tool's own output with an independent reader; an emoji came back as a single stray byte. The result is not a corrupt barcode, which would at least be obvious — it is a good barcode for the wrong string. QR Code, Data Matrix, PDF417 and Aztec declare their encoding inside the symbol and carry Japanese, Greek and emoji back intact.

Which symbology should I pick?

If you are labelling something for retail sale, the number decides for you: a thirteen-digit article number is EAN-13, a twelve-digit one is UPC-A, and the fourteen-digit number on an outer case is ITF-14. If you are labelling something for yourself — assets, shelves, work orders — Code 128 is the default: it takes any printable ASCII, up to the encoder's own ceiling of 500 characters, and packs it more tightly than Code 39, which is older, limited to capitals and six symbols, and measurably wider for the same data — 1.3 times for PART-1024 and 2.1 times for a ten-digit number, because Code 128 folds pairs of digits into one symbol and Code 39 cannot. For anything longer, use a matrix symbology: QR Code where a phone camera will read it, Data Matrix where the label is tiny, PDF417 for the wide stacked codes on licences and boarding passes, and Aztec for tickets.

The code looks fine on screen but the printed one will not scan.

Four things account for nearly all of it. The quiet zone: the blank margin either side is part of the symbol, and cropping a barcode flush to its bars is the commonest cause of a dead label. This page draws the margin the spec asks for — ten narrow bars either side of a linear code, four modules around a matrix one — so keep it. Contrast: most scanners read reflected red light, so red bars on white are invisible to them — the page warns about that pair, and refuses one that grades F for symbol contrast outright, though it can only judge the two colours, not your printer. Resolution: raise the scale, or use the SVG, which is vector and stays sharp at any size while the PNG is fixed at the pixel size shown. And height: a short linear code has to be swept straight, so raise the bar height if the scan is taken by hand.

Is my file uploaded to a server?

No. Transmute processes everything locally in your browser using JavaScript and WebAssembly. Your files never leave your device — there is no server, no upload, no cloud processing.

Related