Generate barcodes in CODE128, CODE39, EAN13, UPC formats
Create barcodes in popular formats including Code 128, EAN-13, UPC-A, Code 39, and more. Enter your data, pick a format, and download the barcode as an image ready for labels, inventory systems, or product packaging.
Initializing in your browser…
A retail system needs an EAN-13 barcode for a new product and you only have the 12-digit prefix, not the final check digit.
First 12 digits
012345678901
EAN-13 barcode
0123456789012 (check digit 2 computed and appended)
EAN-13's 13th digit is a checksum: alternate digits are weighted ×1 and ×3, summed, and the digit needed to reach the next multiple of 10 is appended (here, 2). The tool computes it for you and renders the bars at the correct module width, so a scanner will actually read it instead of rejecting an invalid code.
Create barcodes in popular formats including Code 128, EAN-13, UPC-A, Code 39, and more. Enter your data, pick a format, and download the barcode as an image ready for labels, inventory systems, or product packaging.
This generator renders linear (1D) barcodes in 21 symbologies using the jsbarcode library, grouped in the picker as Standard (CODE 128 plus its A/B/C subsets, CODE 39, CODE 93), Retail/Product (EAN-13, EAN-8, EAN-5, EAN-2, UPC-A, UPC-E), and Industrial (ITF-14, ITF/Interleaved 2 of 5, MSI with mod-10/mod-11 variants, Pharmacode, and Codabar). The CODE 128 subsets are not interchangeable: CODE 128A accepts uppercase, digits and a limited symbol set, CODE 128B accepts all printable ASCII, and CODE 128C only encodes digit pairs (input must be numeric and even-length), which is why each is offered separately. These are all one-dimensional formats - there is no QR or DataMatrix support here, since those are 2D matrix codes.
Input is validated live against per-format rules before anything is drawn. For EAN-13, EAN-8, UPC-A and ITF-14 the tool computes the trailing check digit with a Mod-10 algorithm using 3-1-3 positional weighting (each digit at an odd position from the right is multiplied by 3), so you can type the 12-digit body of an EAN-13 and it auto-completes the 13th digit, but supplying a full code with a wrong check digit is rejected with an inline error. Other formats enforce their own constraints: Pharmacode only accepts integers from 3 to 131070, Codabar requires A-D start/stop letters wrapping the data, ITF and CODE 128C require even digit counts, and EAN-5/EAN-2 are the 5- and 2-digit supplemental add-ons. A green 'Valid input' confirmation or a red error message updates as you type.
Appearance is adjustable through a settings panel with six color presets (Classic, Blue, Green, Red, Purple, Dark) plus custom foreground/background color pickers, a bar-width slider from 1 to 5, a height slider from 50 to 200px, and a font-size slider from 10 to 24px, with an option to hide the human-readable text. Output can be downloaded as PNG, copied to the clipboard as a PNG image, or exported as SVG (note the SVG simply embeds the rasterized PNG inside an <image> element rather than emitting true vector bars). A batch mode lets you queue multiple data/format pairs and download them all as separate PNGs in sequence, and the full configuration - data, format, size, colors - is encoded in the URL so a specific barcode setup can be shared via link.
Choosing EAN-13 and entering the 12-digit body 590123412345 produces a valid 13-digit retail barcode with the check digit filled in automatically.
Pharmacode accepts only integers from 3 to 131070, so a value like 1234 generates a valid pharmaceutical packaging code while 2 or 200000 is rejected.
Generate Code 128 barcodes for internal stock tracking and warehouse operations.
Create EAN-13 or UPC-A barcodes for products sold in stores.
Produce barcodes for package tracking and logistics systems.
Code 128 is versatile and supports the full ASCII set. Use EAN-13 or UPC-A for retail products, and Code 39 for simple alphanumeric labels.
Check that the data matches the format requirements (e.g., EAN-13 needs exactly 12 or 13 digits) and that the print resolution is sufficient.
Conversions run on your device in JavaScript. The values you enter are never sent over the network.