一个整型数,用二码表示出来
规则如下:
01-99(10 blocks of 10 codes,minus the 00)(10组10个,最小的是00)
A1-A9,...Z1-Z9(25 blocks of 10 codes,O series skipped)(25组10个数字,字母O跳过不算)
1A-1Z,...9A-9Z(09 blocks of 25 codes, O series skipped)
AA-AZ,...ZZ-ZA(25 blocks of 25 codes, O series skipped)
规则如下:
01-99(10 blocks of 10 codes,minus the 00)(10组10个,最小的是00)
A1-A9,...Z1-Z9(25 blocks of 10 codes,O series skipped)(25组10个数字,字母O跳过不算)
1A-1Z,...9A-9Z(09 blocks of 25 codes, O series skipped)
AA-AZ,...ZZ-ZA(25 blocks of 25 codes, O series skipped)
规则比较乱,例如 A1 < 1A。查表吧,没得说。Public Function NumberToCode(Byval intNumber As Integer) As String
Select Case intNumber
Case 0 To 99
NumberToCode = Format(intNumber, "0#")
Case 100 To 239
NumberToCode = Chr(55 + intNumber \ 10) & (intNumber Mod 10)
Case 240 To ...
...
End Function不知道你后面的表达规则,自己写吧。返回数字是个逆运算。
Option ExplicitSub Main()
Dim hFile As Integer
Dim i As Long
hFile = FreeFile()
Open "C:\temp\1.txt" For Output As #hFile
For i = 0 To 1174
Print #hFile, i, BinCode(i)
Next
Close #hFile
End SubFunction BinCode(ByVal number As Long) As String
Const IDX_O As Long = 13
Dim sCode As String
Dim l1 As Long
Dim l2 As Long
Select Case number
Case 0 To 99
sCode = Format(number, "00")
Case 100 To 324
l1 = (number - 100) \ 9
If l1 > IDX_O Then l1 = l1 + 1
l2 = ((number - 100) Mod 9) + 1
sCode = Chr(vbKeyA + l1) & CStr(l2)
Case 325 To 549
l1 = ((number - 325) \ 25) + 1
l2 = (number - 325) Mod 25
If l2 > IDX_O Then l2 = l2 + 1
sCode = CStr(l1) & Chr(vbKeyA + l2)
Case 550 To 1174
l1 = (number - 550) \ 25
If l1 > IDX_O Then l1 = l1 + 1
l2 = (number - 550) Mod 25
If l2 > IDX_O Then l2 = l2 + 1
sCode = Chr(vbKeyA + l1) & Chr(vbKeyA + l2)
Case Else
Err.Raise 6 'Overflow
End Select
BinCode = sCode
End Function
另外一种方法,借助 ListBox 控件:Option Explicit
Private Declare Function SendMessagebyString Lib "user32" Alias "SendMessageA" (ByVal hWND As Long, _
ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As LongPrivate Const LB_FINDSTRINGEXACT = &H1A2 '在 ListBox 中精确查找Private Sub Command1_Click()
'数字求编码
Dim intTmp As Integer
intTmp = Val(Text1)
If intTmp < List1.ListCount Then Text2 = List1.List(intTmp)
End SubPrivate Sub Command2_Click()
'编码求数字
Text1 = SendMessagebyString(List1.hWND, LB_FINDSTRINGEXACT, -1, Text2)
End Sub'创建编码列表
Private Sub Form_Load()
Dim i As Integer, j As Integer List1.Visible = False
For i = "00" To "99"
List1.AddItem Format(i, "0#")
Next i
For i = Asc("A") To Asc("Z")
If Chr(i) <> "O" Then
For j = 0 To 9
List1.AddItem Chr(i) & j
Next j
End If
Next i
For i = 1 To 9
For j = Asc("A") To Asc("Z")
If Chr(j) <> "O" Then List1.AddItem CStr(i) & Chr(j)
Next j
Next i
For i = Asc("A") To Asc("Z")
If Chr(i) <> "O" Then
For j = Asc("A") To Asc("Z")
If Chr(j) <> "O" Then List1.AddItem Chr(i) & Chr(j)
Next j
End If
Next i
End Sub
数组算法:Dim myCode(1119) As StringPrivate Sub Command1_Click()
'数字求编码
Dim intTmp As Integer
intTmp = Val(Text1)
If intTmp < 1120 Then Text2 = myCode(intTmp)
End Sub Private Sub Command2_Click()
'编码求数字
Dim i As Integer
For i = 0 To 1119
If myCode(i) = Text2 Exit For
Next i
Text1 = IIf(i < 1200, i, -1)
End Sub '创建编码列表
Private Sub Form_Load()
Dim i As Integer, j As Integer, n As Integer List1.Visible = False
For i = 0 To 99
myCode(i) = Format(i, "0#")
Next i
n = 99
For i = Asc("A") To Asc("Z")
If Chr(i) <> "O" Then
For j = 0 To 9
n = n + 1
myCode(n) = Chr(i) & j
Next j
End If
Next i
For i = 1 To 9
For j = Asc("A") To Asc("Z")
If Chr(j) <> "O" Then
n = n + 1
myCode(n) = CStr(i) & Chr(j)
End If
Next j
Next i
For i = Asc("A") To Asc("Z")
If Chr(i) <> "O" Then
For j = Asc("A") To Asc("Z")
If Chr(j) <> "O" Then
n = n + 1
myCode(n) = Chr(i) & Chr(j)
End If
Next j
End If
Next i
End Sub