Excel中计算UPC码校验位的技术求助
Excel中计算UPC码校验位的技术求助
嘿,我看到你在Excel里计算UPC校验位时碰了壁,别着急,咱们先搞清楚UPC校验位的计算逻辑,再给你靠谱的公式解决问题。
首先,UPC-A的校验位计算规则是这样的:
- 把11位UPC码的**奇数位(从左数第1、3、5、7、9、11位)**数字相加,结果乘以3
- 加上**偶数位(从左数第2、4、6、8、10位)**数字的总和
- 取这个最终总和除以10的余数,用10减去这个余数;如果结果是10,校验位就是0,否则就是这个差值
拿你给出的例子72527273070来验证:
- 奇数位总和:7+5+7+7+0+0 = 26 → 26×3=78
- 偶数位总和:2+2+2+3+7 = 16
- 总和:78+16=94 → 94÷10余4 → 10-4=6,正好和你已知的校验位一致
你之前尝试的公式问题出在权重数组没有正确循环覆盖所有11位,或者在非数组公式环境下无法正确计算每一位的权重。下面给你两种适配不同Excel版本的有效公式:
1. 适配旧版Excel的数组公式(需按Ctrl+Shift+Enter确认)
这个公式需要你输入后按住Ctrl+Shift+Enter组合键来确认(不是单纯回车),因为它是数组运算:
=MOD(10 - MOD(SUMPRODUCT(MID(A1,ROW(1:11),1)*IF(MOD(ROW(1:11),2)=1,3,1)),10),10)
解释:
MID(A1,ROW(1:11),1):提取A1单元格中11位UPC码的每一位数字IF(MOD(ROW(1:11),2)=1,3,1):给奇数位(从左数)分配权重3,偶数位分配权重1SUMPRODUCT:计算所有位数字乘对应权重后的总和- 外层的
MOD运算用来处理余数为0的情况(此时校验位应为0而非10)
2. 适配Excel 365/2021的动态数组公式(直接回车即可)
如果你用的是新版Excel(支持动态数组),可以用更简洁的公式,不需要按组合键:
=MOD(10 - MOD(SUM(MID(A1,SEQUENCE(11),1)*CHOOSE(MOD(SEQUENCE(11),2)+1,3,1)),10),10)
解释:
SEQUENCE(11):生成1到11的序列,代替旧版的ROW(1:11),更直观CHOOSE(MOD(SEQUENCE(11),2)+1,3,1):同样实现奇数位乘3、偶数位乘1的权重分配
直接生成完整UPC码(11位+校验位)
如果需要直接得到包含校验位的完整12位UPC码,只需要把原11位和校验位拼接起来:
=A1&MOD(10 - MOD(SUMPRODUCT(MID(A1,ROW(1:11),1)*IF(MOD(ROW(1:11),2)=1,3,1)),10),10)
旧版Excel同样需要按Ctrl+Shift+Enter确认,新版直接回车即可。
你可以把A1单元格替换成你存放11位UPC码的单元格,测试一下这个公式,应该能得到正确的校验位啦!
备注:内容来源于stack exchange,提问作者mully
相关产品推荐
相关产品推荐

