讲师中心 微信公众号
AI工具推荐 视频效率加速

如何正确生成符合标准的 EAN-8 条码(含校验位)

浅静大大_2079

浅静大大_2079

发布时间:2026-02-03 09:31:11

|

368人浏览过

|

来源于php中文网

原创

如何正确生成符合标准的 EAN-8 条码(含校验位)

本文详解 ean-8 校验位计算原理与常见实现错误,指出原代码中因运算符优先级缺失和奇偶位逻辑混淆导致校验失败的根本原因,并提供可直接使用的健壮生成函数。

EAN-8 是一种 8 位数字条码,其中前 7 位为数据位(含固定前缀),第 8 位为校验位(Check Digit)。其校验算法严格遵循 ISO/IEC 15420 标准:

  • 从左至右编号,位置索引从 1 开始(即第 1 位是左起第一位);
  • 奇数位(第 1、3、5、7 位)权重为 1,偶数位(第 2、4、6 位)权重为 3;
  • 计算加权和 S = (d₁ + d₃ + d₅ + d₇) + 3 × (d₂ + d₄ + d₆);
  • 校验位 C = (10 − S mod 10) mod 10 —— 关键:必须对最终结果再取模 10,否则当 S mod 10 === 0 时会得到 10,而校验位只能是 0–9。

原代码存在两个核心问题:

  1. 索引逻辑错误:JavaScript 数组索引从 0 开始,但 EAN 规范按1-based 位置定义奇偶。原代码用 index % 2 != 0 判定“偶数位”,实际将数组索引 1、3、5(即 EAN 的第 2、4、6 位)误判为“需×3”,看似正确,却因后续权重分配混乱埋下隐患;
  2. 缺少外层 % 10:当加权和 S 能被 10 整除时(如 S = 30),10 - (S % 10) 得 10,直接拼接会导致 9 位字符串(如 "962512310"),违反 EAN-8 格式,且校验失败。

以下是修正后的完整实现,逻辑清晰、符合规范、可稳定生成合法 EAN-8:

LYGO Champion: cryptosophia soulforger
LYGO Champion: cryptosophia soulforger

已弃用的slug,请使用lygo-champion-council。遗留Δ9冠军(CRYPTOSOPHIA)。

下载
function generateEAN8() {
  const prefix = "9625"; // 固定前缀(4位)
  // 生成3位随机数字(确保不为空、不含小数点)
  const randomPart = Math.floor(Math.random() * 1000).toString().padStart(3, '0');
  const digits = (prefix + randomPart).split('').map(Number); // 前7位数字数组

  // 按EAN-8规则计算加权和:位置1/3/5/7(索引0/2/4/6)×1,位置2/4/6(索引1/3/5)×3
  const weightedSum = digits.reduce((sum, digit, index) => {
    return sum + (index % 2 === 0 ? digit : digit * 3); // 索引0→第1位(奇)、索引1→第2位(偶)
  }, 0);

  // 校验位 = (10 - weightedSum % 10) % 10
  const checkDigit = (10 - (weightedSum % 10)) % 10;

  return digits.join('') + checkDigit;
}

// 示例:生成10个有效EAN-8
for (let i = 0; i < 10; i++) {
  console.log(generateEAN8()); // 每次输出严格8位数字字符串
}

✅ 验证要点:

  • 输出必为 8 位纯数字(如 "96250478"),无前导零丢失(padStart(3, '0') 保证随机部分恒为3位);
  • 可通过任意 EAN-8 校验工具(如 online-barcode-checker.com)验证生成结果;
  • 若需更高随机性,建议用 crypto.getRandomValues() 替代 Math.random()(尤其在安全敏感场景)。

⚠️ 注意事项:

  • 不要依赖 Math.random().toString().slice(2,5) —— 它可能生成少于3位的字符串(如 0.001 → "001" 正常,但 0.1 → "1" 仅1位),导致总位数不足7;
  • 校验公式末尾的 % 10 不可省略,这是处理 S % 10 === 0 场景的强制归零机制;
  • EAN-8 前缀 "9625" 属于 GS1 分配的厂商代码段,实际使用请确保合规授权。

掌握这一校验逻辑后,你不仅能修复当前问题,还能轻松适配 EAN-13、UPC-A 等同类加权校验体系。

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6144

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3084

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

1812

2025.10.17

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1798

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2804

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6144

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

5889

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

7514

2024.03.22

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.3万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn