VBA-Hash-String

Wie erhalte ich mit Excel VBA einen kurzen Hash einer langen Zeichenfolge?

Was ist gegeben

Die Eingabezeichenfolge darf nicht länger als 80 Zeichen seinGültige Eingabezeichen sind: [0..9] [A_Z]. _ /Gültige Ausgabezeichen sind [0..9] [A_Z] [a_z](Klein- und Großbuchstaben können verwendet werden)Der Ausgabe-Hash sollte nicht länger als ~ 12 Zeichen sein (kürzer ist noch besser)Sie müssen überhaupt nicht eindeutig sein, da dies zu einem zu langen Hash führt

Was ich bisher gemacht habe

ich dachtediese SO Antwort ist ein guter Anfang, da ein 4-stelliger Hex-Code (CRC16) generiert wird.

Aber 4 Ziffern waren zu wenig. In meinem Test mit 400 Saiten haben 20% ein Duplikat woanders bekommen.
Die Wahrscheinlichkeit, eine Kollision zu erzeugen, ist zu hoch.

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

Wie reproduzieren

Sie können diese 400 kopierenTeststrings aus Pastebin.
Fügen Sie sie in Spalte A einer neuen Excel-Arbeitsmappe ein und führen Sie den obigen Code aus.

Q: Wie erhalte ich einen String-Hash, der kurz genug (12 Zeichen) und lang genug ist, um einen kleinen Prozentsatz von Duplikaten zu erhalten?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage