我必須計算一個20位數的條形碼的校驗位。我有一個包含一些僞代碼的規範,但它看起來很討厭。特別是與部門&商。有很多範圍可能導致失敗,例如精度或舍入等。我想知道這是否是公認的校驗和,以便我可以使用經過測試的實現,最好在C#或Java中使用。這是一個公認的校驗和算法嗎?
信息和代碼:
ORIGNO; Type = String。說明:任何長度的條形碼字符串,不包括最後一個位置的校驗位。例如:一個21字符長途連接條碼字符串在最後(第21)位置有校驗位。因此,ORIGNO將是21個字符長途連接條形碼字符串的前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.在這種情況下,採取正確的數字最,零作爲校驗位在條形碼使用。
謝謝克里斯。這必須是允許字母數字的UPC-A的修改版本。一個典型的條形碼是TNNNNAAAAAANNNNNNNNN,其中第一個AA是服務代碼,其餘AAAA是發送者標識符。一個例子是T20002ATEST000001001。條碼打印爲CODE128格式B.我創建了一個c#方法,我仍在測試。我正在等待來自Toll的一些確認的示例條形碼,然後才能發佈我的實施。 –