一个整型数,用二码表示出来
规则如下:
 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)

解决方案 »

  1.   

    为何0不与字母组合?如果由0~9、A~N、P~Z任取两个来组合,就是35进制了,两位可以表示0~1225。
      

  2.   


    规则比较乱,例如 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不知道你后面的表达规则,自己写吧。返回数字是个逆运算。
      

  3.   

    第二类每组只有9个,扳手指数数都会数错!?
    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
      

  4.   


    另外一种方法,借助 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
      

  5.   


    数组算法: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