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 символов) и достаточно длинный, чтобы получить небольшой процент дубликатов.