gpt4 book ai didi

VBA 哈希字符串

转载 作者:行者123 更新时间:2023-12-03 21:04:01 29 4
gpt4 key购买 nike

如何使用 Excel VBA 获取长字符串的短哈希

给出了什么

  • 输入字符串不超过 80 个字符
  • 有效的输入字符是: [0..9] [A_Z] 。 _/
  • 有效的输出字符为 [0..9] [A_Z] [a_z](大小写均可)
  • 输出哈希不应超过 ~12 个字符(越短越好)
  • 完全不需要唯一,因为这会导致哈希过长

  • 到目前为止我做了什么

    我以为 this SO answer是一个好的开始,因为它会生成一个 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个 test strings from pastebin .
    将它们粘贴到新 Excel 工作簿中的 A 列并执行上面的代码。

    问:如何获得足够短(12 个字符)且足够长以获取一小部分重复项的字符串哈希。

    最佳答案

    也许其他人会发现这很有用。

    我收集了一些不同的函数来在 VBA 中生成一个简短的字符串散列。
    我不相信代码,并且引用了所有来源。

    enter image description here

  • CRC16
  • 功能:=CRC16HASH(A1)有了这个Code
  • hash 是一个 4 个字符长的 HEX 字符串
  • 19 行代码
  • 4 位长哈希 = 6895 行中的 624 次冲突 = 9 % 冲突率
  • CRC16 numeric
  • 功能:=CRC16NUMERIC(A1)有了这个Code
  • 哈希是一个 5 位长的数字
  • 92 行代码
  • 5 位长哈希 = 6895 行中的 616 次冲突 = 8.9 % 冲突率
  • CRC16 twice
  • 功能:=CRC16TWICE(A1)有了这个Code
  • hash 是一个 8 个字符长的 HEX 字符串
  • 哈希可以扩展到 12/16/20 等字符以进一步降低冲突率
  • 39 行代码
  • 8 位长哈希 = 6895 行中的 18 次冲突 = 0.23 % 冲突率
  • SHA1
  • 功能:=SHA1TRUNC(A1)有了这个Code
  • hash 是一个 40 个字符长的 HEX 字符串
  • 142 行代码
  • 可以截断
  • 4 位哈希 = 6895 行中的 726 次冲突 = 10.5 % 冲突率
  • 5 位哈希 = 6895 行中的 51 次冲突 = 0.73 % 冲突率
  • 6 位哈希 = 6895 行中 0 次冲突 = 0 % 冲突率
  • SHA1 + Base64
  • 功能:=BASE64SHA1(A1)有了这个Code
  • hash 是 28 个字符长的 unicode 字符串(区分大小写 + 特殊字符)
  • 41 行代码
  • 需要 .NET,因为它使用库“Microsoft MSXML”
  • 可以截断
  • 4 位哈希 = 6895 行中的 36 次冲突 = 0.5 % 冲突率
  • 5 位哈希 = 6895 行中的 0 次冲突 = 0 % 冲突率

  • Here是我的测试工作簿,包含所有示例函数和大量测试字符串。

    随意添加自己的功能。

    关于VBA 哈希字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14717526/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com