以前的一个项目中遇到过要核对条码的校验码的需求,感觉有时候还是非常有用的,下面提供代码,代码版本为VB.net:
//根据输入的的条码来计算该条码的校验位
Private Function GetCheckDigit(Byal strCode As String) As String
Dim intCurVal As Int16 = 0
Dim intChksum As Int16 = 0
Dim chrCur As String
Dim intPos As Int16
Dim intCurVal As Int16 = 0
Dim intChksum As Int16 = 0
Dim chrCur As String
Dim intPos As Int16
'Check for invalid characters and calculate check sum
For intPos = 1 To Len(strCode)
chrCur = Mid(strCode, intPos, 1)
Select Case chrCur
Case "0" To "9"
intCurVal = Val(chrCur)
Case "A" To "Z"
intCurVal = Asc(chrCur) - 55
Case "-"
intCurVal = 36
Case "."
intCurVal = 37
Case " "
intCurVal = 38
Case "$"
intCurVal = 39
Case "/"
intCurVal = 40
Case "+"
intCurVal = 41
Case "%"
intCurVal = 42
Case Else
For intPos = 1 To Len(strCode)
chrCur = Mid(strCode, intPos, 1)
Select Case chrCur
Case "0" To "9"
intCurVal = Val(chrCur)
Case "A" To "Z"
intCurVal = Asc(chrCur) - 55
Case "-"
intCurVal = 36
Case "."
intCurVal = 37
Case " "
intCurVal = 38
Case "$"
intCurVal = 39
Case "/"
intCurVal = 40
Case "+"
intCurVal = 41
Case "%"
intCurVal = 42
Case Else
End Select
intChksum = intChksum + intCurVal
Next
intChksum = intChksum + intCurVal
Next
intChksum = intChksum Mod 43
Select Case intChksum
Case 0 To 9
Return intChksum.ToString()
Case 10 To 35
Return Chr(intChksum + 55)
Case 36
Return "-"
Case 37
Return "."
Case 38
Return " "
Case 39
Return "$"
Case 40
Return "/"
Case 41
Return "+"
Case 42
Return "%"
Case Else
Case 0 To 9
Return intChksum.ToString()
Case 10 To 35
Return Chr(intChksum + 55)
Case 36
Return "-"
Case 37
Return "."
Case 38
Return " "
Case 39
Return "$"
Case 40
Return "/"
Case 41
Return "+"
Case 42
Return "%"
Case Else
End Select
Return "0"
End Function
End Function