我必须计算 20 位条形码的校验位。我有一个包含一些伪代码的规范,但它看起来很讨厌。尤其是除法和商的部分。由于精度损失或舍入等而失败的可能性很大。我想知道这是否是公认的校验和,以便我可以使用经过测试的实现,最好是在 c# 或 java 中。
信息和代码:
奥里尼奥;类型 = 字符串。描述:任何长度的条形码字符串,不包括最后一个位置的校验位。示例:21 个字符的 Toll Connect 条码字符串在最后(第 21 个)位置有校验位。因此 ORIGNO 将是 21 个字符的 Toll Connect 条形码字符串的前 20 个字符。
PRODUCTNO = 0; type=integer
LENGTHNO = Length (ORIGNO)
MULTIPLIER=3
For LP = LENGTHNO to 1 step -1
CHARTOCHECK=MID (ORIGNO,LP,1)
IF isnumeric (CHARTOCHECK) then
DIGIT = asc (CHARTOCHECK) - asc ('0')
else
DIGIT = rem ((asc (CHARTOCHECK)-asc ('A')) / 10)
endif
PRODUCTNO = PRODUCTNO + DIGIT*MULTIPLIER
If MULTIPLIER=3 then MULTIPLIER=1 else MULTIPLIER=3 endif
end for
CHECK DIGITSTR=str (PRODUCTNO)
CHECK DIGIT=10-int (asc (right (CHECK DIGITSTR,1))-asc ('0'))
注意:此算法可能导致校验位被计算为 10。在这种情况下,取最右边的数字零作为条形码中使用的校验位。