๐ŸŒ
Orcascan
orcascan.com โ€บ tools โ€บ upc-a-generator
UPC-A Barcode Generator
It is designed to encode only numeric data, meaning it can store digits from 0 to 9, without the ability to hold letters or special characters. You can use Orca Scan web or mobile application to generate multiple upc-a barcodes using the following ...
๐ŸŒ
Tec-IT
barcode.tec-it.com โ€บ en โ€บ UPCA
Free Online Barcode Generator: UPC-A
Free UPC-A Generator: This free online barcode generator creates all 1D and 2D barcodes. Download the generated barcode as bitmap or vector image.
People also ask

What is a barcode generator?
A barcode generator converts data into a scannable barcode image. A product number, SKU, asset ID, or URL goes in, and a barcode comes out that can be printed or scanned. Wasp's free online Barcode Maker lets users create common 1D and 2D barcode types including Code 128, Code 39, UPC-A, EAN-13, Data Matrix, and QR Codes directly in their browser with no account or payment required.
๐ŸŒ
waspbarcode.com
waspbarcode.com โ€บ barcode-maker
Custom UPC Barcode and QR Code Generator
What is a barcode generator, and why would I need one?
A barcode generator is a digital tool that creates scannable barcode images from your data. You need one to efficiently manage inventory, track assets, streamline point-of-sale processes, or enhance marketing efforts. It eliminates manual data entry errors, saves time, and provides accurate, machine-readable identification for products, documents, or locations. This ensures smooth operations across various industries.
๐ŸŒ
yotpo.com
yotpo.com โ€บ tools โ€บ barcode-generator
Free Barcode Generator
How does the check digit work in UPC-A and EAN-13 barcodes?
The check digit is the final digit in UPC-A and EAN-13 barcodes, crucial for error detection during scanning. It's calculated using a specific algorithm (often a modulo 10 sum of the preceding digits, with alternating weights). When a barcode is scanned, the scanner performs the same calculation. If the calculated check digit matches the one printed on the barcode, it confirms a successful and accurate scan. If they don't match, an error is signaled, preventing incorrect data entry.
๐ŸŒ
yotpo.com
yotpo.com โ€บ tools โ€บ barcode-generator
Free Barcode Generator
๐ŸŒ
ZPS Store
zpsstore.com โ€บ home โ€บ barcode generator
Free Barcode Generator
Explore the versatility of our free barcode generator form below, allowing you to effortlessly generate printable and scannable barcodes in UPC-A, EAN (2 , 5, 8, or 13), Code 11, Code 39, Code 128 (A, B, or C) and QR Code symbologies.
๐ŸŒ
Yotpo
yotpo.com โ€บ tools โ€บ barcode-generator
Free Barcode Generator
April 9, 2026 - Code 128 can encode up to 80 characters (alphanumeric). UPC-A requires exactly 12 digits (including the check digit), and EAN-13 requires exactly 13 digits (including the check digit).
๐ŸŒ
Barcodes Pro
barcodes.pro โ€บ generator
Free Online Barcode Generator | Barcodes Pro
July 5, 2020 - Generate UPC, EAN, QR codes and Data Matrix on Barcodes Pro. Best UPC and EAN barcode services Worldwide. Standard barcode plans are one-time purchases with no hidden annual renewal fees; Amazon (GS1 Verified) plans include GS1 registration ...
๐ŸŒ
MobileDemand
mobiledemand.com โ€บ barcode-generator
Free Barcode Generator | MobileDemand
Create barcodes for free with our online generator. Generate individual barcodes or sheets of 30 laid out on Avery Easy Peel label sheets.
Find elsewhere
๐ŸŒ
Cognex
cognex.com โ€บ home โ€บ tools and resources
Free Online Barcode Generator | UPC, 128, QR Codes
Cognex machine vision solutions address the critical needs facing manufacturers and logistics providers, improving quality and reducing costs by detecting defects, reading barcodes and text, guiding robots, and accurately tracking, sorting, and identifying parts, products, and packages.
๐ŸŒ
Opticon
generator.opticon.com
Free Opticon Barcode Generator Tool
Generate linear, DataMatrix, QR, and all other relevant barcodes for free with the Opticon Barcode Generator Tool. It also supports Wi-Fi codes, Google Maps.
๐ŸŒ
Free-barcode-generator
free-barcode-generator.net
Free barcode generator EAN-13, EAN-8, EAN-128, ISBN, ISSN, UPC, Code-128, Code-39, Code-93, ITF-14, 2 z 5, Code-11, Pharmacode, MSI, Codabar, QR, Datamatrix, Aztec
Free barcode generator. EAN-8, EAN-13, EAN-128 (GS1-128), ISBN, ISSN, UPC-A, UPC-E, Code-128, ITF-14, 2 of 5, Code-39, Code-93, Code-11, Leitcode, Identcode, Postnet, Planet, Royalmail, MSI, Codabar, Pharmacode, QR, DataMatrix, Aztec - www.free-barcode-generator.net
๐ŸŒ
Wasp Barcode Technologies
waspbarcode.com โ€บ barcode-maker
Custom UPC Barcode and QR Code Generator
April 9, 2026 - Wasp Barcode Maker generates barcodes as PNG files, which work well for most barcode printing applications. PNG files preserve sharp edges and scan reliably when printed on labels, packaging, asset tags, and other tracking materials.
๐ŸŒ
Free-barcode-generator
free-barcode-generator.net โ€บ upc-a
UPC-A free barcode generator with bar width reduction (vector PDF, AI, EPS)
To generate UPC-A barcode with additional digits specify it as such: โ€ข 12345678901:12 ยท โ€ข 12345678901:12345 ยท All characters outside the allowed range will be ignored. If is possible to compress UPC-A code into UPC-E code, the generator will show UPC-E code.
๐ŸŒ
Barcodes Pro
barcodes.pro โ€บ generator โ€บ upca
Free Online UPC-A Generator | Barcodes Pro
July 5, 2020 - Generate UPC, EAN, QR codes and Data Matrix on Barcodes Pro. Best UPC and EAN barcode services Worldwide. Standard barcode plans are one-time purchases with no hidden annual renewal fees; Amazon (GS1 Verified) plans include GS1 registration ...
๐ŸŒ
Avery
avery.com โ€บ software โ€บ barcode-generator
Free Barcode Generator - QR Code Generator | Avery.com
When youโ€™re using a barcode generator to create UPC-A barcode labels, a good one will do the necessary calculation and add the check digit for you if itโ€™s missing. If you have 12-digit UPC-A codes that already include the check digit youโ€™re all set and no further numbers will be added.
๐ŸŒ
Scandit
scandit.com โ€บ home โ€บ barcode generator
Free Online Barcode Generator | Scandit
These symbologies cover a broad range of use cases including product identification, logistics, inventory management, procurement and advertising. Use the following instructions to get started: Create a UPC-A code by entering 12 numeric digits ...
๐ŸŒ
BarcodesInc
barcodesinc.com โ€บ home โ€บ services โ€บ barcode generator โ€บ upc/ean generator
UPC/EAN Barcode Generator - BarcodesInc
Important Note for Windows users ... this UPC generator creates. Run this registry file to unblock XBM files. You may have to close all Internet Explorer windows or restart your computer before the fix will take effect. You may enter 7-, 8-, 12- or 13-digit barcodes...
๐ŸŒ
GS1 US
gs1us.org โ€บ home โ€บ upc, barcodes & prefixes โ€บ create a barcode
Create a Barcode | GS1 US
Use Data Hub to create and generate barcodes for your products. GS1 US barcodes are accepted globally in store & by all major online ecommerce sites
๐ŸŒ
Shopify
shopify.com โ€บ tools โ€บ barcode-generator
Free Online Barcode Generator: Create Barcodes (2026) - Shopify
Universal product code (UPC) barcodes can either be global EAN-13 barcodes, or US/Canada based UPC-A barcodes. The barcode image can look very similar but the barcode data inputs are different. You can generate a barcode using a web based tool like our barcode generator on this page for free.
๐ŸŒ
BarcodesInc
barcodesinc.com โ€บ home โ€บ services
UPC, Barcode and Label Generator Tools - Barcodes Inc
Generate a printable and scannable barcode in Interleaved 2 of 5, Code 39, Code 128 A, B, or C symbologies. This free service can be used to generate individual barcodes or called via URLs to include inline PNG or JPEG images directly into your documents.
๐ŸŒ
Shopify Community
community.shopify.com โ€บ c โ€บ shopify-discussions โ€บ 12-digit-barcode โ€บ m-p โ€บ 2617217
12 digit barcode - Shopify Community
June 13, 2024 - The required code is a UPC (a 12โ€‘digit retail barcode/GTIN used for scanning at point of sale). Shopify cannot generate UPCs.
๐ŸŒ
Reddit
reddit.com โ€บ r/adobeillustrator โ€บ upc-a barcode script
r/AdobeIllustrator on Reddit: UPC-A Barcode Script
June 7, 2025 -

I'm a product developer, but with some regularity I need to create or edit UPC barcodes when I am doing packaging design for clients. I have been frustrated with the options for UPC Barcode generation. Most of the online ones that I have found (for free) spit you out a raster image that isn't really useable if you're doing anything more than putting a junky-looking white sticker on the back of a box or hang tag. There is/was a good plug-in for EAN 13, but not UPC-A.

It dawned on me to use an LLM and my almost non-existent knowledge of coding to make a script that can run in Adobe Illustrator. After an hour of LLM jiu-jitsu (mostly me getting choked out), I have the following working prototype:

BTW - you'll need to create a new plain text file and save it as something memorable, like "generateUPC.jsx" in a location that you can get to easily. ( I have a folder of document templates and swatch libraries in the cloud, so I keep it there). Once you save that, then go into Ai and file>Scripts>other scripts (ctrl+f12); select your new jsx file that you just made and then enter the info in the prompts. This should spit you out a working UPC barcode with the UPC number below it. Also whatever human-readable text you want to put below the number. It generates a grouped object and text more or less in the center of the Ai working area (so you probably need to go looking for it).

And I welcome your critique and edits. I have next-to-zero understanding of programming, so you won't hurt my feelings. FYI, I did test it with some things from the pantry and a UPC scanner app on my iPhone; seemed to work fine!

-----Copy everything below this line into the notepad file -------

// UPC-A Barcode Generator for Adobe Illustrator
// This script creates scannable UPC-A barcodes with human-readable text

// UPC-A encoding patterns
var leftPatterns = [
    "0001101", "0011001", "0010011", "0111101", "0100011",
    "0110001", "0101111", "0111011", "0110111", "0001011"
];

var rightPatterns = [
    "1110010", "1100110", "1101100", "1000010", "1011100",
    "1001110", "1010000", "1000100", "1001000", "1110100"
];

var guardPatterns = {
    start: "101",
    middle: "01010",
    end: "101"
};

function createUPCBarcode() {
    try {
        // Get UPC number from user
        var upcInput = prompt("Enter 12-digit UPC number (digits only):", "");
        
        if (!upcInput) {
            alert("Script cancelled.");
            return;
        }
        
        // Get human readable text from user
        var humanReadableText = prompt("Enter human readable text (optional - press Cancel or leave blank for none):", "");
        if (humanReadableText === null) {
            humanReadableText = ""; // User pressed Cancel
        }
        
        // Clean and validate input
        var upcNumber = upcInput.replace(/\D/g, ''); // Remove non-digits
        
        if (upcNumber.length !== 12) {
            alert("Please enter exactly 12 digits for UPC-A barcode.");
            return;
        }
        
        // Calculate check digit to verify
        var calculatedCheck = calculateCheckDigit(upcNumber.substring(0, 11));
        if (parseInt(upcNumber.charAt(11)) !== calculatedCheck) {
            var useCalculated = confirm("Check digit doesn't match. Use calculated check digit (" + calculatedCheck + ")?");
            if (useCalculated) {
                upcNumber = upcNumber.substring(0, 11) + calculatedCheck;
            }
        }
        
        // Create the barcode
        generateBarcode(upcNumber, humanReadableText);
        
    } catch (error) {
        alert("Error creating barcode: " + error.message);
    }
}

function calculateCheckDigit(digits) {
    var sum = 0;
    for (var i = 0; i < 11; i++) {
        var digit = parseInt(digits.charAt(i));
        if (i % 2 === 0) {
            sum += digit * 3; // Odd positions (1st, 3rd, 5th, etc.) multiply by 3
        } else {
            sum += digit; // Even positions multiply by 1
        }
    }
    var checkDigit = (10 - (sum % 10)) % 10;
    return checkDigit;
}

function generateBarcode(upcNumber, humanReadableText) {
    // Barcode dimensions
    var barWidth = 2; // Width of each bar in points
    var normalBarHeight = 60; // Height of number bars
    var guardBarExtension = normalBarHeight * 0.15; // Guard bars extend 15% below
    var textHeight = 12; // Text size
    var upcTextOffset = normalBarHeight * 0.1; // UPC text 10% lower than number bars
    var humanTextOffset = 8; // Space between UPC text and human readable text
    
    // Create new document or use active document
    var doc = app.activeDocument;
    
    // Create group for the barcode
    var barcodeGroup = doc.groupItems.add();
    barcodeGroup.name = "UPC Barcode: " + upcNumber;
    
    // Generate barcode pattern
    var barcodePattern = createBarcodePattern(upcNumber);
    
    // Draw bars
    var currentX = 0;
    var guardPositions = getGuardPositions();
    
    for (var i = 0; i < barcodePattern.length; i++) {
        if (barcodePattern.charAt(i) === "1") {
            var isGuardBar = isInGuardPositions(i, guardPositions);
            var barHeight = isGuardBar ? normalBarHeight + guardBarExtension : normalBarHeight;
            // All bars start at the same Y position (0), guard bars extend downward
            var bar = doc.pathItems.rectangle(0, currentX, barWidth, barHeight);
            bar.filled = true;
            bar.fillColor = createBlackColor();
            bar.stroked = false;
            bar.move(barcodeGroup, ElementPlacement.INSIDE);
        }
        currentX += barWidth;
    }
    
    // Add UPC number text
    var totalWidth = barcodePattern.length * barWidth;
    var upcTextItem = doc.textFrames.add();
    upcTextItem.contents = formatUPCText(upcNumber);
    upcTextItem.textRange.characterAttributes.size = textHeight;
    
    // Try to use a monospace font, fallback to default if not available
    try {
        upcTextItem.textRange.characterAttributes.textFont = app.textFonts.getByName("Courier New");
    } catch (e) {
        try {
            upcTextItem.textRange.characterAttributes.textFont = app.textFonts.getByName("Myriad Pro");
        } catch (e2) {
            try {
                upcTextItem.textRange.characterAttributes.textFont = app.textFonts.getByName("Consolas");
            } catch (e3) {
                // Use the first available font as fallback
                if (app.textFonts.length > 0) {
                    upcTextItem.textRange.characterAttributes.textFont = app.textFonts[0];
                }
            }
        }
    }
    
    // Position UPC text centered below barcode, some% lower than number bars
    var upcTextWidth = upcTextItem.width;
    upcTextItem.position = [
        (totalWidth - upcTextWidth) / 4,
        -(normalBarHeight + upcTextOffset + textHeight)
    ];
    
    upcTextItem.move(barcodeGroup, ElementPlacement.INSIDE);
    
    // Add human readable text if provided
    if (humanReadableText && humanReadableText.length > 0) {
        var humanTextItem = doc.textFrames.add();
        humanTextItem.contents = humanReadableText;
        humanTextItem.textRange.characterAttributes.size = textHeight;
        
        // Use same font as UPC text
        try {
            humanTextItem.textRange.characterAttributes.textFont = upcTextItem.textRange.characterAttributes.textFont;
        } catch (e) {
            if (app.textFonts.length > 0) {
                humanTextItem.textRange.characterAttributes.textFont = app.textFonts[0];
            }
        }
        
        // Position human readable text centered below UPC text
        var humanTextWidth = humanTextItem.width;
        humanTextItem.position = [
            (totalWidth - humanTextWidth) / 2,
            -(normalBarHeight + upcTextOffset + textHeight + humanTextOffset + textHeight)
        ];
        
        humanTextItem.move(barcodeGroup, ElementPlacement.INSIDE);
    }
    
    // Position the entire barcode group
    barcodeGroup.position = [100, -100]; // Adjust as needed
    
    alert("UPC Barcode created successfully!");
}

function createBarcodePattern(upcNumber) {
    var pattern = "";
    
    // Start guard
    pattern += guardPatterns.start;
    
    // Left side (first 6 digits)
    for (var i = 0; i < 6; i++) {
        var digit = parseInt(upcNumber.charAt(i));
        pattern += leftPatterns[digit];
    }
    
    // Middle guard
    pattern += guardPatterns.middle;
    
    // Right side (last 6 digits)
    for (var i = 6; i < 12; i++) {
        var digit = parseInt(upcNumber.charAt(i));
        pattern += rightPatterns[digit];
    }
    
    // End guard
    pattern += guardPatterns.end;
    
    return pattern;
}

function getGuardPositions() {
    // Returns array of bit positions where guard bars are located
    var positions = [];
    var pos = 0;
    
    // Start guard positions
    for (var i = 0; i < 3; i++) {
        if (guardPatterns.start.charAt(i) === "1") {
            positions.push(pos);
        }
        pos++;
    }
    
    // Skip left digits (6 * 7 bits)
    pos += 42;
    
    // Middle guard positions
    for (var i = 0; i < 5; i++) {
        if (guardPatterns.middle.charAt(i) === "1") {
            positions.push(pos);
        }
        pos++;
    }
    
    // Skip right digits (6 * 7 bits)
    pos += 42;
    
    // End guard positions
    for (var i = 0; i < 3; i++) {
        if (guardPatterns.end.charAt(i) === "1") {
            positions.push(pos);
        }
        pos++;
    }
    
    return positions;
}

function formatUPCText(upcNumber) {
    // Format as: 1 23456 78901 2 (first digit, space space, 5 digits, space space, 5 digits, space space, last digit)
    return upcNumber.charAt(0) + "  " + 
           upcNumber.substring(1, 6) + "  " + 
           upcNumber.substring(6, 11) + "  " + 
           upcNumber.charAt(11);
}

function isInGuardPositions(position, guardPositions) {
    for (var i = 0; i < guardPositions.length; i++) {
        if (guardPositions[i] === position) {
            return true;
        }
    }
    return false;
}

function createBlackColor() {
    var color = new CMYKColor();
    color.cyan = 0;
    color.magenta = 0;
    color.yellow = 0;
    color.black = 100;
    return color;
}

// Run the script
createUPCBarcode();