VBA хэш-строка

Как получить короткий хэш длинной строки с помощью Excel VBA

Что дано

Входная строка не длиннее 80 символовДопустимые символы ввода: [0..9] [A_Z]. _ /Допустимые выходные символы: [0..9] [A_Z] [a_z](нижний и верхний регистр можно использовать)Выходной хеш не долженне длиннее ~ 12 символов (короче еще лучше)Не нужно быть уникальным вообще, так как это приведет к слишком длинному хешу

Что я сделал до сих пор

я думалэтот так ответ это хорошее начало, поскольку он генерирует 4-значный шестнадцатеричный код (CRC16).

Но 4 цифры были мало. В моем тесте с 400 строками 20% получили дубликаты где-то еще.

Вероятность возникновения столкновения слишком высока.

Sub tester()
    For i = 2 To 433
        Cells(i, 2) = CRC16(Cells(i, 1))
    Next i
End Sub


Function CRC16(txt As String)
Dim x As Long
Dim mask, i, j, nC, Crc As Integer
Dim c As String

Crc = &HFFFF

For nC = 1 To Len(txt)
    j = Val("&H" + Mid(txt, nC, 2))
    Crc = Crc Xor j
    For j = 1 To 8
        mask = 0
        If Crc / 2  Int(Crc / 2) Then mask = &HA001
        Crc = Int(Crc / 2) And &H7FFF: Crc = Crc Xor mask
    Next j
Next nC

CRC16 = Hex$(Crc)
End Function

Как воспроизвести

Вы можете скопировать эти 400тестовые струны из пастбина.

Вставьте их в столбец A в новой книге Excel и выполните приведенный выше код.

Q: Как получить строковый хеш, который достаточно короткий (12 символов) и достаточно длинный, чтобы получить небольшой процент дубликатов.

Ответы на вопрос(4)

Ваш ответ на вопрос