Code 128 is a dense and flexible symbology for internal operations. EAN and UPC are numeric retail standards and depend on valid commercial identification.
Create Code 128, EAN-13, EAN-8 and UPC-A barcodes as SVG directly in the browser.
A barcode is not just a set of bars: each symbology has character, length, checksum and usage rules. Under the hood, the code translates each character into a specific pattern of bars and spaces of varying widths, which the scanner interprets from the ratio between light and dark. Code 128 is flexible and accepts letters, numbers and printable ASCII symbols, ideal for internal labels; EAN-13, EAN-8 and UPC-A are numeric, retail-oriented, and require an exact length because the last digit is a check digit computed from the others. This tool generates local SVG (a vector that scales without losing sharpness) for prototyping, tests and simple artwork, computing the check digit when you provide the numeric base. But commercial printing still needs correct dimensions, contrast, quiet zone and validation in the ecosystem where the code will be scanned. Everything is generated in the browser, without sending the value to servers.
A 1D barcode encodes data in the relative widths of the dark bars and light spaces. Each symbology has its table: Code 128 uses three character sets to cover the full printable ASCII range densely, while EAN and UPC have fixed patterns for the digits 0–9. The scanner does not 'read numbers' directly, it measures the sequence of widths and translates it back into characters.
In retail codes, the last digit is a check digit: it is computed from the previous ones by a weighted sum with alternating weights of 1 and 3, reduced modulo 10. If a digit is misread, the math doesn't add up and the scanner rejects the read. That is why the tool asks for the numeric base (12 digits for EAN-13, for example) and computes the final digit for you, or validates the full code if you already provide all of them.
Example 1, internal label: choose Code 128 and type something like 'PROD-2026-A17'. Since Code 128 accepts letters, numbers and ASCII symbols (up to 80 characters), it produces a compact code perfect for inventory, logistics and asset tracking, where you control both the printing and the scanner.
Example 2, retail product: choose EAN-13 and enter the first 12 digits; the tool computes and appends the 13th check digit automatically. If you paste all 13 digits, it validates whether the check digit matches. The same applies to EAN-8 (7→8) and UPC-A (11→12).
The tool is great for prototyping, testing scanners, building internal labels and generating simple artwork. It validates structure and checksum locally, but does not query GS1, retailers or external databases, inventing an EAN here does not create a real registered product. Retail codes depend on issuance and registration in the appropriate ecosystem.
To print for real, respect three things that make a code fail when ignored: high contrast (dark bars on a light background), adequate scale (not too small) and the quiet zone, the mandatory blank margin before and after the bars, without which the scanner confuses where the code starts and ends. Always test with the real scanner before printing batches.
Paste the code into your HTML and the tool shows up on your page, without J-Kit's navigation and ads. It still runs in the browser of whoever visits your site.
<iframe
src="https://jkit.tools/embed/en-US/barcode-generator"
width="100%"
height="600"
style="border:0"
loading="lazy"
title="Barcode Generator"
></iframe>These references help contextualize formulas, standards, APIs and limitations used on this page. They do not replace professional validation when a result has legal, financial, medical or operational impact.
Code 128 is a dense and flexible symbology for internal operations. EAN and UPC are numeric retail standards and depend on valid commercial identification.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 314 136" width="314" height="136" role="img" aria-label="Barcode TOOLS-2026"><rect width="100%" height="100%" fill="#fff"/><g fill="#111"><rect x="12" y="8" width="4" height="96"/><rect x="18" y="8" width="2" height="96"/><rect x="24" y="8" width="2" height="96"/><rect x="34" y="8" width="4" height="96"/><rect x="40" y="8" width="6" height="96"/><rect x="52" y="8" width="2" height="96"/><rect x="56" y="8" width="2" height="96"/><rect x="64" y="8" width="6" height="96"/><rect x="72" y="8" width="4" height="96"/><rect x="78" y="8" width="2" height="96"/><rect x="86" y="8" width="6" height="96"/><rect x="94" y="8" width="4" height="96"/><rect x="100" y="8" width="2" height="96"/><rect x="108" y="8" width="4" height="96"/><rect x="114" y="8" width="6" height="96"/><rect x="122" y="8" width="4" height="96"/><rect x="128" y="8" width="6" height="96"/><rect x="136" y="8" width="2" height="96"/><rect x="144" y="8" width="2" height="96"/><rect x="150" y="8" width="4" height="96"/><rect x="156" y="8" width="6" height="96"/><rect x="166" y="8" width="4" height="96"/><rect x="174" y="8" width="6" height="96"/><rect x="184" y="8" width="2" height="96"/><rect x="188" y="8" width="2" height="96"/><rect x="194" y="8" width="6" height="96"/><rect x="202" y="8" width="4" height="96"/><rect x="210" y="8" width="4" height="96"/><rect x="218" y="8" width="6" height="96"/><rect x="228" y="8" width="2" height="96"/><rect x="232" y="8" width="4" height="96"/><rect x="240" y="8" width="6" height="96"/><rect x="248" y="8" width="2" height="96"/><rect x="254" y="8" width="2" height="96"/><rect x="262" y="8" width="2" height="96"/><rect x="266" y="8" width="8" height="96"/><rect x="276" y="8" width="4" height="96"/><rect x="286" y="8" width="6" height="96"/><rect x="294" y="8" width="2" height="96"/><rect x="298" y="8" width="4" height="96"/></g><text x="157" y="123" text-anchor="middle" font-family="monospace" font-size="16" fill="#111">TOOLS-2026</text></svg>Everything is generated locally in the browser; the barcode value is not sent to the server.