or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

cli.mdcode128.mdconfiguration.mdean-upc.mdindex.mdindustrial-formats.md
tile.json

ean-upc.mddocs/

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

```