Vb.net 需要新的描述算法吗
校验位计算 字母表中的数字和字母是赋值的。0-9等于0-9。A-Z是10-35,空格是36 示例字符串: CA5B9AJ1564 计算:Vb.net 需要新的描述算法吗,vb.net,modulo,Vb.net,Modulo,校验位计算 字母表中的数字和字母是赋值的。0-9等于0-9。A-Z是10-35,空格是36 示例字符串: CA5B9AJ1564 计算: C=12 A=10 5=5 B=11 9=9 A=10 J=19 1=1 5=5 6=6 4=4 每个值按从36到1的降序相乘,如下所示: 36*12=432 35*10=350 34*5=170 33*11=363 32*9=288 31*10=310 30*19=570 29*1=29 28*5=140 27*6=162 26*4=104 =2918 29
C=12
A=10
5=5
B=11
9=9
A=10
J=19
1=1
5=5
6=6
4=4
每个值按从36到1的降序相乘,如下所示:
36*12=432
35*10=350
34*5=170
33*11=363
32*9=288
31*10=310
30*19=570
29*1=29
28*5=140
27*6=162
26*4=104
=2918 2918然后除以37=78 r32
32的剩余部分从股息=37-32=
中减去 5是校验位
我需要帮助将上述算法转换为vb.net中的一系列嵌套循环或私有子循环。我想使用Mod运算符,因为我们公司现在使用的公式是3。我在Excel中手动运行了3个不同的字符串。
当前代码:(使用测试字符串关闭3)
Private函数CheckDigit37(ByVal字段字符串作为字符串)
将字符串值设置为整数
将索引设置为整数
将最后位置设置为整数
Dim CharIndex作为整数
作为字符串的Dim CharString
变暗值37一样长
使余数变长
Dim CheckDigitValue为整数
Dim CheckDigit As String=“”
如果FieldString=“”,则
返回错误
其他的
FieldString=FieldString.ToUpper
String36Value=RoundUp(FieldString.Length/36)
如果结束
对于PositionIndex=1到String36Value
如果FieldString.Length=36,则
LastPosition=36
ElseIf PositionIndexPrivate Function CheckDigit37(ByVal FieldString As String)
Dim String36Value As Integer
Dim PositionIndex As Integer
Dim LastPosition As Integer
Dim CharIndex As Integer
Dim CharString As String
Dim Value37 As Long
Dim Remainder As Long
Dim CheckDigitValue As Integer
Dim CheckDigit As String = " "
If FieldString = "" Then
Return False
Else
FieldString = FieldString.ToUpper
String36Value = RoundUp(FieldString.Length / 36)
End If
For PositionIndex = 1 To String36Value
If FieldString.Length = 36 Then
LastPosition = 36
ElseIf PositionIndex < String36Value Then
LastPosition = 36
Else
LastPosition = FieldString.Length - 36 * (PositionIndex - 1)
End If
For CharIndex = 1 To LastPosition
CharString = Mid(FieldString, CharIndex + (PositionIndex - 1) * 36, 1)
'If CharString = "" Then GoTo EndLoop
Select Case CharString
Case 0
Value37 = Value37 + 0 * (37 - CharIndex)
Case 1
Value37 = Value37 + 1 * (37 - CharIndex)
Case 2
Value37 = Value37 + 2 * (37 - CharIndex)
Case 3
Value37 = Value37 + 3 * (37 - CharIndex)
Case 4
Value37 = Value37 + 4 * (37 - CharIndex)
Case 5
Value37 = Value37 + 5 * (37 - CharIndex)
Case 6
Value37 = Value37 + 6 * (37 - CharIndex)
Case 7
Value37 = Value37 + 7 * (37 - CharIndex)
Case 8
Value37 = Value37 + 8 * (37 - CharIndex)
Case 9
Value37 = Value37 + 9 * (37 - CharIndex)
Case "A"
Value37 = Value37 + 10 * (37 - CharIndex)
Case "B"
Value37 = Value37 + 11 * (37 - CharIndex)
Case "C"
Value37 = Value37 + 12 * (37 - CharIndex)
Case "D"
Value37 = Value37 + 13 * (37 - CharIndex)
Case "E"
Value37 = Value37 + 14 * (37 - CharIndex)
Case "F"
Value37 = Value37 + 15 * (37 - CharIndex)
Case "G"
Value37 = Value37 + 16 * (37 - CharIndex)
Case "H"
Value37 = Value37 + 17 * (37 - CharIndex)
Case "I"
Value37 = Value37 + 18 * (37 - CharIndex)
Case "J"
Value37 = Value37 + 19 * (37 - CharIndex)
Case "K"
Value37 = Value37 + 20 * (37 - CharIndex)
Case "L"
Value37 = Value37 + 21 * (37 - CharIndex)
Case "M"
Value37 = Value37 + 22 * (37 - CharIndex)
Case "N"
Value37 = Value37 + 23 * (37 - CharIndex)
Case "O"
Value37 = Value37 + 24 * (37 - CharIndex)
Case "P"
Value37 = Value37 + 25 * (37 - CharIndex)
Case "Q"
Value37 = Value37 + 26 * (37 - CharIndex)
Case "R"
Value37 = Value37 + 27 * (37 - CharIndex)
Case "S"
Value37 = Value37 + 28 * (37 - CharIndex)
Case "T"
Value37 = Value37 + 29 * (37 - CharIndex)
Case "U"
Value37 = Value37 + 30 * (37 - CharIndex)
Case "V"
Value37 = Value37 + 31 * (37 - CharIndex)
Case "W"
Value37 = Value37 + 32 * (37 - CharIndex)
Case "X"
Value37 = Value37 + 33 * (37 - CharIndex)
Case "Y"
Value37 = Value37 + 34 * (37 - CharIndex)
Case "Z"
Value37 = Value37 + 35 * (37 - CharIndex)
Case " "
Value37 = Value37 + 36 * (37 - CharIndex)
Case Else
Value37 = Value37 + 0 * (37 - CharIndex)
End Select
Next
Next
Remainder = Value37 - Int(Value37 / 37) * 37
CheckDigitValue = 37 - Remainder
Select Case CheckDigitValue
Case 0
CheckDigit = 0
Case 1
CheckDigit = 1
Case 2
CheckDigit = 2
Case 3
CheckDigit = 3
Case 4
CheckDigit = 4
Case 5
CheckDigit = 5
Case 6
CheckDigit = 6
Case 7
CheckDigit = 7
Case 8
CheckDigit = 8
Case 9
CheckDigit = 9
Case "10"
CheckDigit = "A"
Case "11"
CheckDigit = "B"
Case "12"
CheckDigit = "C"
Case "13"
CheckDigit = "D"
Case "14"
CheckDigit = "E"
Case "15"
CheckDigit = "F"
Case "16"
CheckDigit = "G"
Case "17"
CheckDigit = "H"
Case "18"
CheckDigit = "I"
Case "19"
CheckDigit = "J"
Case "20"
CheckDigit = "K"
Case "21"
CheckDigit = "L"
Case "22"
CheckDigit = "M"
Case "23"
CheckDigit = "N"
Case "24"
CheckDigit = "O"
Case "25"
CheckDigit = "P"
Case "26"
CheckDigit = "Q"
Case "27"
CheckDigit = "R"
Case "28"
CheckDigit = "S"
Case "29"
CheckDigit = "T"
Case "30"
CheckDigit = "U"
Case "31"
CheckDigit = "V"
Case "32"
CheckDigit = "W"
Case "33"
CheckDigit = "X"
Case "34"
CheckDigit = "Y"
Case "35"
CheckDigit = "Z"
Case "36"
CheckDigit = " "
Case "37"
CheckDigit = "0"
End Select
Return CheckDigit
End Function
Private Function CheckDigit37(ByVal FieldString As String) As String
Dim CharIndex As Integer = 36
Dim Value37 As Long
Dim CheckDigitValue As Integer
Dim CheckDigit As String = ""
' This will hold the character we're currently evaluating
Dim C As Char
FieldString = FieldString.ToUpper()
For i As Integer = 0 To FieldString.Length - 1
' If CharIndex has reached 0 and we still have characters left,
' change it back to 36
If (CharIndex = 0) Then
CharIndex = 36
End If
' Get the next character in the string
C = FieldString(i)
If (IsNumeric(C)) Then
' Subtract 48 from the ASCII value to get the algorithm value
Value37 = Value37 + (CharIndex * (Asc(C) - 48))
ElseIf (Asc(C) >= 65 AndAlso Asc(C) <= 90) Then
' Subtract 55 from the ASCII value to get the algorithm value
Value37 = Value37 + (CharIndex * (Asc(C) - 55))
ElseIf (Asc(C) = 32) Then
' We have a space (ASCII 32)
Value37 = Value37 + (CharIndex * 36)
End If
' Decrease the CharIndex by 1
CharIndex = CharIndex - 1
Next
CheckDigitValue = 37 - (Value37 Mod 37)
If (CheckDigitValue <= 9) Then
' We have a number
CheckDigit = Chr(CheckDigitValue + 48)
ElseIf (CheckDigitValue = 36) Then
' We have a space
CheckDigit = Chr(32)
Else
' We have A - Z
CheckDigit = Chr(CheckDigitValue + 55)
End If
Return CheckDigit
End Function