Я тестирую функцию VB ниже, которую я получил из поиска Google. Я планирую использовать его для генерации хеш-кодов для быстрого сравнения строк. Однако бывают случаи, когда две разные строки имеют одинаковый хэш-код. Например, эти строки
"122Gen 1 размер кучи (.NET CLR Memory w3wp): mccsmtpteweb025.20833333333333E-02"
"122Gen 2 размера кучи (.NET CLR Memory w3wp): mccsmtpteweb015.20833333333333E-02"
имеет тот же хеш-код 237117279.
Пожалуйста, скажите мне:
- Что не так с функцией?
- Как я могу это исправить?
Спасибо
мартин
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As Any, src As Any, ByVal bytes As Long)
Private Function HashCode(Key As String) As Long
On Error GoTo ErrorGoTo
Dim lastEl As Long, i As Long
' copy ansi codes into an array of long'
lastEl = (Len(Key) - 1) \ 4
ReDim codes(lastEl) As Long
' this also converts from Unicode to ANSI'
CopyMemory codes(0), ByVal Key, Len(Key)
' XOR the ANSI codes of all characters'
For i = 0 To lastEl - 1
HashCode = HashCode Xor codes(i) 'Xor'
Next
ErrorGoTo:
Exit Function
End Function