[转] VB6.0 Dictionary 排序,生成Sign

  最近遇到好多要生成 sign 的接口,要求使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串,最后拼接上key进行MD5加密。

  规则:

  1. . ◆ 参数名ASCII码从小到大排序(字典序);
  2. . ◆ 如果参数的值为空不参与签名;
  3. . ◆ 参数名区分大小写;
  4. . ◆ 参数名Sign 、Key 不参与拼接字符串;

  发现VB6.0 的资料很少,特此整理一份网上的代码。

  转自:http://www.mzwu.com/article.asp?id=2245 

'说明:Dictionary排序
'参数:
'   objDict:Dictionary对象
'   intSort: 1 根据key排序; 2 根据value排序
Function SortDictionary(objDict, intSort)
  ' declare our variables
  Dim strDict()
  Dim objKey
  Dim strKey, strItem
  Dim X, Y, Z

  ' get the dictionary count
  Z = objDict.Count

  ' we need more than one item to warrant sorting
  If Z > 1 Then
    ' create an array to store dictionary information
    ReDim strDict(Z, 2)
    X = 0
    ' populate the string array
    For Each objKey In objDict
        strDict(X, 1) = CStr(objKey)
        strDict(X, 2) = CStr(objDict(objKey))
        X = X + 1
    Next

    ' perform a a shell sort of the string array
    For X = 0 To (Z - 2)
      For Y = X To (Z - 1)
        If StrComp(strDict(X, intSort), strDict(Y, intSort), vbTextCompare) > 0 Then
            strKey = strDict(X, 1)
            strItem = strDict(X, 2)
            strDict(X, 1) = strDict(Y, 1)
            strDict(X, 2) = strDict(Y, 2)
            strDict(Y, 1) = strKey
            strDict(Y, 2) = strItem
        End If
      Next
    Next

    ' erase the contents of the dictionary object
    objDict.RemoveAll

    ' repopulate the dictionary with the sorted information
    For X = 0 To (Z - 1)
        If LCase(strDict(X, 1)) <> "sign" And LCase(strDict(X, 1)) <> "key" And strDict(X, 2) <> "" Then
            objDict.Add strDict(X, 1), strDict(X, 2)
        End If
    Next

  End If
End Function

  使用方法:

    Dim dict As Dictionary
    Dim item
    Dim Return as String 
    
    Set dict = New Dictionary
    
    dict.Add "aaa", "094959"
    dict.Add "ccc", "0000000000"
    dict.Add "fff", "20180912"
SortDictionary dict, 1 '排序 For Each item In dict Return = Return & item & "=" & dict(item) & "&" Next
Return = Return & "key=keyvalue"
Debug.Print Return