条形码检查和校验 (#60)

 

问题

条形码扫描后是一个 13 位的数字字符串。为应对扫描错误的情况,条形码有“检查和”校验的方法,用于校验条形码是否有错。具体的计算规则为:

取出 13 位字符串的前 12 位数字,将每个奇数位的数字相加得到 S1,将每个偶数位的数字相加得到 S2,用 S1 减去 S2,然后和 10 取余数,最后取绝对值,得到的数字应该等于第 13 位条码,如果不等则为错误的条形码。

请计算给定的条形码的正确性。

思路

大致思路:将给出的条形码的 13 位数字转化为序列,求出序列中前 12 位奇数位的数字之和后,再求出偶数位之和,将求得的两个数值做减法运算,所得的差对 10 求余后再取绝对值,最后判断所得的数值与条形码的最后一位数字是否相等。

代码

A
1 ="1234567890123" 给出的条形码
2 =A1. split@p() 将条形码转化为序列
3 =A2(to(12)).step(2,1).sum() 前 12 位奇数位的数字之和
4 =A2(to(12)).step(2,2).sum() 计前 12 位偶数位的数字之和
5 =abs((A3-A4)%10) 奇数位之和减去偶数位之和再对 10 求余最后取绝对值
6 =A5==A2.m(-1) 判断 A5 的结果是否与条形码的最后一位相同

结果

imagepng