← 全部文章
工具教程

条码校验位怎么算:EAN-13、UPC-A、EAN-8、ITF-14、SSCC 手算步骤与 Excel 公式

拿到 12 位厂商代码加商品码,最后那一位不是随便填的。EAN-13、UPC-A、EAN-8、ITF-14、SSCC 用的是同一个算法,会算一种就全会了;批量做几百个 SKU,一条 Excel 公式就够。

GS1 体系里的条码——零售的 EAN-13 / UPC-A、小包装的 EAN-8、外箱的 ITF-14、物流单元的 SSCC——最后一位都是校验位。它不携带信息,只用来让扫描枪判断前面的数字有没有读错:任何一位读错、两位相邻互换,重新算出的校验位就对不上,设备直接拒读。这也是为什么校验位算错的条码「怎么扫都扫不出」。

🏷️ 关键要点

  • 只有一个算法:从右往左(不含校验位)按 3、1、3、1… 交替乘权重求和,校验位 = 把和补到 10 的整数倍需要加的数。
  • 五种码制的区别只是位数:EAN-8 前 7 位、UPC-A 前 11 位、EAN-13 前 12 位、ITF-14 前 13 位、SSCC 前 17 位。
  • Excel 一条公式:把不含校验位的数字放在 A1(设为文本格式),下面第三节的公式直接算;批量验证也有公式。
  • 算好了别手输:在GS1 校验位计算器里算完直接复制,或者让条码生成器自动补——输 12 位它会自己算第 13 位。

一、算法:右起 3、1 交替加权

  1. 把不含校验位的数字从右往左编号,最右一位乘 3,往左依次乘 1、3、1、3……
  2. 把乘积全部加起来,得到和 S。
  3. 校验位 = (10 − S mod 10) mod 10。也就是:S 的个位是 0 就填 0,否则填「10 减个位」。

为什么是「从右往左」而不是从左往右?因为五种码制长度不同,从左数权重起点会变;从右数则永远是最右一位乘 3,一个规则通吃。很多教程写「EAN-13 奇数位乘 1、偶数位乘 3」,那只对 12 位输入成立,换成 UPC-A 就反了。

二、五种码制逐位示例

EAN-13(69 码):输入 12 位

前 12 位 690123456789

6×1 + 9×3 + 0×1 + 1×3 + 2×1 + 3×3 + 4×1 + 5×3 + 6×1 + 7×3 + 8×1 + 9×3 = 128

128 的个位是 8,10 − 8 = 2,完整条码 6901234567892

码制输入位数示例(不含校验位)校验位完整编码
EAN-879638507496385074
UPC-A11036000291452036000291452
EAN-131269012345678926901234567892
ITF-14 / GTIN-14131690123456789916901234567899
SSCC17369123456789012341369123456789012341

注意 ITF-14 那行:它就是 EAN-13 的 12 位前面加一位包装指示符(1–8,表示几级包装),校验位要重新算,不是把 EAN-13 的校验位照抄过去——上表里 EAN-13 校验位是 2,加了指示符 1 之后变成 9。外箱码扫不出,这是最常见的原因之一。

三、Excel / WPS 公式

先把放数字的列设成文本格式(否则以 0 开头的 UPC 会被吃掉前导零,13 位以上会变成科学计数法)。以下公式假设不含校验位的数字在 A1,Excel 2010 以上和 WPS 表格都能用。

算校验位(按码制)

码制A1 位数公式(算出校验位)
EAN-87=MOD(10-MOD(SUMPRODUCT(--MID(A1,ROW($1:$7),1),{{3;1;3;1;3;1;3}}),10),10)
UPC-A11=MOD(10-MOD(SUMPRODUCT(--MID(A1,ROW($1:$11),1),{{3;1;3;1;3;1;3;1;3;1;3}}),10),10)
EAN-1312=MOD(10-MOD(SUMPRODUCT(--MID(A1,ROW($1:$12),1),{{1;3;1;3;1;3;1;3;1;3;1;3}}),10),10)
ITF-1413=MOD(10-MOD(SUMPRODUCT(--MID(A1,ROW($1:$13),1),{{3;1;3;1;3;1;3;1;3;1;3;1;3}}),10),10)
SSCC17=MOD(10-MOD(SUMPRODUCT(--MID(A1,ROW($1:$17),1),{{3;1;3;1;3;1;3;1;3;1;3;1;3;1;3;1;3}}),10),10)

拼出完整条码:=A1&B1(B1 是上面算出的校验位)。权重数组里的分号是「竖着排」,和 ROW() 返回的竖向数组对齐,别改成逗号。

任意长度通用公式(Excel 365 / 2021、WPS 新版)

=MOD(10-MOD(SUMPRODUCT(--MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),IF(MOD(LEN(A1)-ROW(INDIRECT("1:"&LEN(A1))),2)=0,3,1)),10),10)

不用管 A1 是几位,自动从右起 3、1 加权。旧版 Excel 里要按 Ctrl+Shift+Enter 作为数组公式输入。

批量验证已有的完整条码

供应商给了一列 13 位 EAN,想知道哪些是错的:完整码在 A1,

=IF(MOD(SUMPRODUCT(--MID(A1,ROW($1:$13),1),{1;3;1;3;1;3;1;3;1;3;1;3;1}),10)=0,"正确","校验位错误")

原理是把校验位也算进去,正确的条码加权和一定是 10 的整数倍。UPC-A 把 $1:$13 改成 $1:$12、数组改成 12 个(首位权重 3);ITF-14 改成 14 个(首位权重 1)。

四、校验位错了会怎样

五、几个容易混的地方

参考资料

常见问题

EAN-13 条码的校验位怎么算?

取前 12 位,从右往左按 3、1、3、1 交替乘权重求和,再看和的个位:是 0 校验位就是 0,否则用 10 减去个位。例如 690123456789 的加权和是 128,校验位是 2,完整条码 6901234567892。

UPC-A、ITF-14、SSCC 的校验位算法和 EAN-13 一样吗?

完全一样,都是 GS1 的 mod-10 算法,从右往左 3、1 交替加权。区别只在输入位数:UPC-A 11 位、EAN-13 12 位、ITF-14 13 位、SSCC 17 位。ITF-14 加了包装指示符后校验位必须重新算,不能照抄 EAN-13 的。

Excel 里怎么批量算条码校验位?

把不含校验位的 12 位数字放在 A 列(文本格式),B1 输入 =MOD(10-MOD(SUMPRODUCT(--MID(A1,ROW($1:$12),1),{1;3;1;3;1;3;1;3;1;3;1;3}),10),10),向下填充即可;完整码用 =A1&B1 拼接。UPC-A 把范围改成 $1:$11、权重数组改成 11 个且首位为 3。

校验位算错的条码能扫出来吗?

基本扫不出。扫描枪默认会校验最后一位,不通过就丢弃,表现和没扫到一样;电商平台上传商品时也会校验 GTIN 并打回。条码扫不出时先用校验位计算器验证最后一位,再去查打印质量。

相关工具与文章

文中参数为常见生产场景的经验值,具体设备与材料批次之间存在差异,批量生产前请先小样试打。需要工厂直接报价可在线询价,1 个工作日内回复。