0
# EAN and UPC Barcodes
1
2
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.
3
4
## Capabilities
5
6
### EAN-13 Barcodes
7
8
EAN-13 is the standard European retail barcode format, encoding 13 digits with automatic checksum calculation.
9
10
```javascript { .api }
11
/**
12
* Generate EAN-13 barcode with automatic checksum
13
* @param content - 12 or 13 digit number (checksum calculated if 12 digits)
14
*/
15
JsBarcode(element, content, { format: "EAN13" });
16
// Also accepts: format: "EAN"
17
```
18
19
**Usage Examples:**
20
21
```javascript
22
// 12 digits - checksum automatically added
23
JsBarcode("#barcode", "123456789012", { format: "EAN13" });
24
25
// 13 digits - validates existing checksum
26
JsBarcode("#barcode", "1234567890128", { format: "EAN13" });
27
28
// Common retail product codes
29
JsBarcode("#barcode", "501234567890", { format: "EAN" });
30
```
31
32
### EAN-8 Barcodes
33
34
EAN-8 is a shortened version of EAN-13 for small products, encoding 8 digits with automatic checksum calculation.
35
36
```javascript { .api }
37
/**
38
* Generate EAN-8 barcode with automatic checksum
39
* @param content - 7 or 8 digit number (checksum calculated if 7 digits)
40
*/
41
JsBarcode(element, content, { format: "EAN8" });
42
```
43
44
**Usage Examples:**
45
46
```javascript
47
// 7 digits - checksum automatically added
48
JsBarcode("#barcode", "1234567", { format: "EAN8" });
49
50
// 8 digits - validates existing checksum
51
JsBarcode("#barcode", "12345670", { format: "EAN8" });
52
53
// Small product codes
54
JsBarcode("#barcode", "5012345", { format: "EAN8" });
55
```
56
57
### UPC-A Barcodes
58
59
UPC-A is the standard North American retail barcode format, encoding 12 digits with automatic checksum calculation.
60
61
```javascript { .api }
62
/**
63
* Generate UPC-A barcode with automatic checksum
64
* @param content - 11 or 12 digit number (checksum calculated if 11 digits)
65
*/
66
JsBarcode(element, content, { format: "UPC" });
67
// Also accepts: format: "UPCA"
68
```
69
70
**Usage Examples:**
71
72
```javascript
73
// 11 digits - checksum automatically added
74
JsBarcode("#barcode", "12345678901", { format: "UPC" });
75
76
// 12 digits - validates existing checksum
77
JsBarcode("#barcode", "123456789012", { format: "UPC" });
78
79
// Standard UPC product codes
80
JsBarcode("#barcode", "04210000526", { format: "UPC" });
81
```
82
83
### EAN-5 Addon Barcodes
84
85
EAN-5 is a 5-digit addon code typically used for book prices, magazines, or promotional codes.
86
87
```javascript { .api }
88
/**
89
* Generate EAN-5 addon barcode
90
* @param content - Exactly 5 digits
91
*/
92
JsBarcode(element, content, { format: "EAN5" });
93
```
94
95
**Usage Examples:**
96
97
```javascript
98
// Book price codes
99
JsBarcode("#barcode", "52999", { format: "EAN5" }); // $29.99
100
101
// Magazine issue numbers
102
JsBarcode("#barcode", "00123", { format: "EAN5" });
103
104
// Promotional codes
105
JsBarcode("#barcode", "99999", { format: "EAN5" });
106
```
107
108
### EAN-2 Addon Barcodes
109
110
EAN-2 is a 2-digit addon code typically used for magazines or periodicals.
111
112
```javascript { .api }
113
/**
114
* Generate EAN-2 addon barcode
115
* @param content - Exactly 2 digits
116
*/
117
JsBarcode(element, content, { format: "EAN2" });
118
```
119
120
**Usage Examples:**
121
122
```javascript
123
// Magazine issue numbers
124
JsBarcode("#barcode", "01", { format: "EAN2" }); // Issue 1
125
JsBarcode("#barcode", "12", { format: "EAN2" }); // Issue 12
126
127
// Periodic publication codes
128
JsBarcode("#barcode", "52", { format: "EAN2" }); // Week 52
129
```
130
131
## Checksum Calculation and Validation
132
133
### EAN-13 and EAN-8 Checksum
134
135
EAN barcodes use a weighted modulo-10 checksum algorithm:
136
137
```javascript
138
// Internal checksum calculation for EAN-13:
139
// 1. Multiply odd position digits by 1, even position digits by 3
140
// 2. Sum all results
141
// 3. Checksum = (10 - (sum % 10)) % 10
142
143
// Example for "123456789012":
144
// 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
145
// = 1 + 6 + 3 + 12 + 5 + 18 + 7 + 24 + 9 + 0 + 1 + 6 = 92
146
// Checksum = (10 - (92 % 10)) % 10 = 8
147
// Result: "1234567890128"
148
```
149
150
### UPC-A Checksum
151
152
UPC-A uses a similar but slightly different weighted checksum:
153
154
```javascript
155
// Internal checksum calculation for UPC-A:
156
// 1. Multiply odd position digits by 3, even position digits by 1
157
// 2. Sum all results
158
// 3. Checksum = (10 - (sum % 10)) % 10
159
160
// Example for "12345678901":
161
// Positions: 1×3 + 2×1 + 3×3 + 4×1 + 5×3 + 6×1 + 7×3 + 8×1 + 9×3 + 0×1 + 1×3
162
// = 3 + 2 + 9 + 4 + 15 + 6 + 21 + 8 + 27 + 0 + 3 = 98
163
// Checksum = (10 - (98 % 10)) % 10 = 2
164
// Result: "123456789012"
165
```
166
167
### EAN-5 and EAN-2 Checksum
168
169
Addon codes use their own checksum algorithms:
170
171
```javascript
172
// EAN-5 checksum:
173
// 1. Multiply positions by alternating 3,9,3,9,3 pattern
174
// 2. Sum results and take modulo 10
175
176
// EAN-2 checksum:
177
// 1. Convert to number and take modulo 4
178
// 2. Use result to select check pattern
179
```
180
181
## Validation and Error Handling
182
183
### Input Validation
184
185
```javascript
186
// Valid EAN-13 inputs
187
JsBarcode("#barcode", "123456789012", {
188
format: "EAN13",
189
valid: function(isValid) {
190
console.log("EAN-13 valid:", isValid); // true
191
}
192
});
193
194
// Invalid length
195
JsBarcode("#barcode", "12345", {
196
format: "EAN13",
197
valid: function(isValid) {
198
if (!isValid) {
199
console.log("EAN-13 requires 12 or 13 digits");
200
}
201
}
202
});
203
204
// Invalid checksum
205
JsBarcode("#barcode", "1234567890123", {
206
format: "EAN13",
207
valid: function(isValid) {
208
if (!isValid) {
209
console.log("Invalid EAN-13 checksum");
210
}
211
}
212
});
213
```
214
215
### Format-Specific Validation
216
217
```javascript { .api }
218
/**
219
* EAN-13 validation
220
* @param data - Input string
221
* @returns boolean - True if 13 digits with valid checksum or 12 digits
222
*/
223
// Accepts: /^[0-9]{12,13}$/ with checksum validation
224
225
/**
226
* EAN-8 validation
227
* @param data - Input string
228
* @returns boolean - True if 8 digits with valid checksum or 7 digits
229
*/
230
// Accepts: /^[0-9]{7,8}$/ with checksum validation
231
232
/**
233
* UPC-A validation
234
* @param data - Input string
235
* @returns boolean - True if 12 digits with valid checksum or 11 digits
236
*/
237
// Accepts: /^[0-9]{11,12}$/ with checksum validation
238
239
/**
240
* EAN-5 validation
241
* @param data - Input string
242
* @returns boolean - True if exactly 5 digits
243
*/
244
// Accepts: /^[0-9]{5}$/
245
246
/**
247
* EAN-2 validation
248
* @param data - Input string
249
* @returns boolean - True if exactly 2 digits
250
*/
251
// Accepts: /^[0-9]{2}$/
252
```
253
254
## Practical Usage Examples
255
256
### Retail Product Barcodes
257
258
```javascript
259
// Create product barcode with styling
260
JsBarcode("#product-barcode", "501234567890", {
261
format: "EAN13",
262
width: 2,
263
height: 100,
264
displayValue: true,
265
fontSize: 14,
266
textAlign: "center"
267
});
268
269
// UPC barcode for North American products
270
JsBarcode("#upc-barcode", "04210000526", {
271
format: "UPC",
272
background: "#ffffff",
273
lineColor: "#000000",
274
margin: 10
275
});
276
```
277
278
### Book and Magazine Barcodes
279
280
```javascript
281
// Book with price addon
282
const bookCode = "9781234567890";
283
const priceCode = "52999"; // $29.99
284
285
// Main barcode
286
JsBarcode("#book-main", bookCode, { format: "EAN13" });
287
// Price addon
288
JsBarcode("#book-price", priceCode, { format: "EAN5" });
289
290
// Magazine with issue number
291
const magazineCode = "1234567890123";
292
const issueCode = "03"; // Issue 3
293
294
JsBarcode("#magazine-main", magazineCode, { format: "EAN13" });
295
JsBarcode("#magazine-issue", issueCode, { format: "EAN2" });
296
```
297
298
### Validation Before Generation
299
300
```javascript
301
function generateRetailBarcode(productCode, format) {
302
JsBarcode("#barcode", productCode, {
303
format: format,
304
valid: function(isValid) {
305
if (isValid) {
306
console.log(`Valid ${format} barcode generated`);
307
// Enable print button, show barcode, etc.
308
} else {
309
console.error(`Invalid ${format} code: ${productCode}`);
310
// Show error message, highlight input field, etc.
311
}
312
}
313
});
314
}
315
316
// Usage
317
generateRetailBarcode("123456789012", "EAN13");
318
generateRetailBarcode("04210000526", "UPC");
319
```
320
321
## Regional and Industry Standards
322
323
### EAN Country Codes
324
325
EAN-13 prefixes indicate country/region of registration:
326
327
```javascript
328
// Common country prefixes
329
const countryCodes = {
330
"00-13": "USA & Canada",
331
"20-29": "In-store functions",
332
"30-37": "France",
333
"40-44": "Germany",
334
"45-49": "Japan",
335
"50": "United Kingdom",
336
"690-699": "China",
337
"000-999": "Various countries"
338
};
339
340
// Generate with specific country prefix
341
JsBarcode("#barcode", "501234567890", { format: "EAN13" }); // UK product
342
```
343
344
### UPC Company Prefixes
345
346
UPC-A codes are assigned by GS1 with company-specific prefixes:
347
348
```javascript
349
// Company gets assigned prefix (e.g., 042100)
350
// Product codes within that range (e.g., 00526)
351
// Full UPC: 042100005268 (with checksum)
352
JsBarcode("#barcode", "04210000526", { format: "UPC" });
353
```