JavaScript barcode generator library that creates various types of 1D barcodes with extensive customization options for both browsers and Node.js environments.
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
European Article Number (EAN) and Universal Product Code (UPC) formats are the most widely used barcodes for retail products worldwide. JsBarcode provides complete support for all EAN and UPC variants with automatic checksum calculation and validation.
EAN-13 is the standard European retail barcode format, encoding 13 digits with automatic checksum calculation.
/**
* Generate EAN-13 barcode with automatic checksum
* @param content - 12 or 13 digit number (checksum calculated if 12 digits)
*/
JsBarcode(element, content, { format: "EAN13" });
// Also accepts: format: "EAN"Usage Examples:
// 12 digits - checksum automatically added
JsBarcode("#barcode", "123456789012", { format: "EAN13" });
// 13 digits - validates existing checksum
JsBarcode("#barcode", "1234567890128", { format: "EAN13" });
// Common retail product codes
JsBarcode("#barcode", "501234567890", { format: "EAN" });EAN-8 is a shortened version of EAN-13 for small products, encoding 8 digits with automatic checksum calculation.
/**
* Generate EAN-8 barcode with automatic checksum
* @param content - 7 or 8 digit number (checksum calculated if 7 digits)
*/
JsBarcode(element, content, { format: "EAN8" });Usage Examples:
// 7 digits - checksum automatically added
JsBarcode("#barcode", "1234567", { format: "EAN8" });
// 8 digits - validates existing checksum
JsBarcode("#barcode", "12345670", { format: "EAN8" });
// Small product codes
JsBarcode("#barcode", "5012345", { format: "EAN8" });UPC-A is the standard North American retail barcode format, encoding 12 digits with automatic checksum calculation.
/**
* Generate UPC-A barcode with automatic checksum
* @param content - 11 or 12 digit number (checksum calculated if 11 digits)
*/
JsBarcode(element, content, { format: "UPC" });
// Also accepts: format: "UPCA"Usage Examples:
// 11 digits - checksum automatically added
JsBarcode("#barcode", "12345678901", { format: "UPC" });
// 12 digits - validates existing checksum
JsBarcode("#barcode", "123456789012", { format: "UPC" });
// Standard UPC product codes
JsBarcode("#barcode", "04210000526", { format: "UPC" });EAN-5 is a 5-digit addon code typically used for book prices, magazines, or promotional codes.
/**
* Generate EAN-5 addon barcode
* @param content - Exactly 5 digits
*/
JsBarcode(element, content, { format: "EAN5" });Usage Examples:
// Book price codes
JsBarcode("#barcode", "52999", { format: "EAN5" }); // $29.99
// Magazine issue numbers
JsBarcode("#barcode", "00123", { format: "EAN5" });
// Promotional codes
JsBarcode("#barcode", "99999", { format: "EAN5" });EAN-2 is a 2-digit addon code typically used for magazines or periodicals.
/**
* Generate EAN-2 addon barcode
* @param content - Exactly 2 digits
*/
JsBarcode(element, content, { format: "EAN2" });Usage Examples:
// Magazine issue numbers
JsBarcode("#barcode", "01", { format: "EAN2" }); // Issue 1
JsBarcode("#barcode", "12", { format: "EAN2" }); // Issue 12
// Periodic publication codes
JsBarcode("#barcode", "52", { format: "EAN2" }); // Week 52EAN barcodes use a weighted modulo-10 checksum algorithm:
// Internal checksum calculation for EAN-13:
// 1. Multiply odd position digits by 1, even position digits by 3
// 2. Sum all results
// 3. Checksum = (10 - (sum % 10)) % 10
// Example for "123456789012":
// Positions: 1×1 + 2×3 + 3×1 + 4×3 + 5×1 + 6×3 + 7×1 + 8×3 + 9×1 + 0×3 + 1×1 + 2×3
// = 1 + 6 + 3 + 12 + 5 + 18 + 7 + 24 + 9 + 0 + 1 + 6 = 92
// Checksum = (10 - (92 % 10)) % 10 = 8
// Result: "1234567890128"UPC-A uses a similar but slightly different weighted checksum:
// Internal checksum calculation for UPC-A:
// 1. Multiply odd position digits by 3, even position digits by 1
// 2. Sum all results
// 3. Checksum = (10 - (sum % 10)) % 10
// Example for "12345678901":
// Positions: 1×3 + 2×1 + 3×3 + 4×1 + 5×3 + 6×1 + 7×3 + 8×1 + 9×3 + 0×1 + 1×3
// = 3 + 2 + 9 + 4 + 15 + 6 + 21 + 8 + 27 + 0 + 3 = 98
// Checksum = (10 - (98 % 10)) % 10 = 2
// Result: "123456789012"Addon codes use their own checksum algorithms:
// EAN-5 checksum:
// 1. Multiply positions by alternating 3,9,3,9,3 pattern
// 2. Sum results and take modulo 10
// EAN-2 checksum:
// 1. Convert to number and take modulo 4
// 2. Use result to select check pattern// Valid EAN-13 inputs
JsBarcode("#barcode", "123456789012", {
format: "EAN13",
valid: function(isValid) {
console.log("EAN-13 valid:", isValid); // true
}
});
// Invalid length
JsBarcode("#barcode", "12345", {
format: "EAN13",
valid: function(isValid) {
if (!isValid) {
console.log("EAN-13 requires 12 or 13 digits");
}
}
});
// Invalid checksum
JsBarcode("#barcode", "1234567890123", {
format: "EAN13",
valid: function(isValid) {
if (!isValid) {
console.log("Invalid EAN-13 checksum");
}
}
});/**
* EAN-13 validation
* @param data - Input string
* @returns boolean - True if 13 digits with valid checksum or 12 digits
*/
// Accepts: /^[0-9]{12,13}$/ with checksum validation
/**
* EAN-8 validation
* @param data - Input string
* @returns boolean - True if 8 digits with valid checksum or 7 digits
*/
// Accepts: /^[0-9]{7,8}$/ with checksum validation
/**
* UPC-A validation
* @param data - Input string
* @returns boolean - True if 12 digits with valid checksum or 11 digits
*/
// Accepts: /^[0-9]{11,12}$/ with checksum validation
/**
* EAN-5 validation
* @param data - Input string
* @returns boolean - True if exactly 5 digits
*/
// Accepts: /^[0-9]{5}$/
/**
* EAN-2 validation
* @param data - Input string
* @returns boolean - True if exactly 2 digits
*/
// Accepts: /^[0-9]{2}$/// Create product barcode with styling
JsBarcode("#product-barcode", "501234567890", {
format: "EAN13",
width: 2,
height: 100,
displayValue: true,
fontSize: 14,
textAlign: "center"
});
// UPC barcode for North American products
JsBarcode("#upc-barcode", "04210000526", {
format: "UPC",
background: "#ffffff",
lineColor: "#000000",
margin: 10
});// Book with price addon
const bookCode = "9781234567890";
const priceCode = "52999"; // $29.99
// Main barcode
JsBarcode("#book-main", bookCode, { format: "EAN13" });
// Price addon
JsBarcode("#book-price", priceCode, { format: "EAN5" });
// Magazine with issue number
const magazineCode = "1234567890123";
const issueCode = "03"; // Issue 3
JsBarcode("#magazine-main", magazineCode, { format: "EAN13" });
JsBarcode("#magazine-issue", issueCode, { format: "EAN2" });function generateRetailBarcode(productCode, format) {
JsBarcode("#barcode", productCode, {
format: format,
valid: function(isValid) {
if (isValid) {
console.log(`Valid ${format} barcode generated`);
// Enable print button, show barcode, etc.
} else {
console.error(`Invalid ${format} code: ${productCode}`);
// Show error message, highlight input field, etc.
}
}
});
}
// Usage
generateRetailBarcode("123456789012", "EAN13");
generateRetailBarcode("04210000526", "UPC");EAN-13 prefixes indicate country/region of registration:
// Common country prefixes
const countryCodes = {
"00-13": "USA & Canada",
"20-29": "In-store functions",
"30-37": "France",
"40-44": "Germany",
"45-49": "Japan",
"50": "United Kingdom",
"690-699": "China",
"000-999": "Various countries"
};
// Generate with specific country prefix
JsBarcode("#barcode", "501234567890", { format: "EAN13" }); // UK productUPC-A codes are assigned by GS1 with company-specific prefixes:
// Company gets assigned prefix (e.g., 042100)
// Product codes within that range (e.g., 00526)
// Full UPC: 042100005268 (with checksum)
JsBarcode("#barcode", "04210000526", { format: "UPC" });