VBA 哈希字符串

2024-03-07

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

给予什么

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

到目前为止我做了什么

我想这个答案 https://stackoverflow.com/a/7360012/935614这是一个好的开始,因为它生成 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来自pastebin的测试字符串 http://pastebin.com/raw.php?i=wY3E9pTg.
将它们粘贴到新 Excel 工作簿中的 A 列并执行上面的代码。

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


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

我收集了一些不同的函数来在 VBA 中生成字符串的短哈希。
我不将代码归功于我,并且所有来源均被引用。

  1. CRC16 https://stackoverflow.com/a/7360012/935614
    • 功能:=CRC16HASH(A1)有了这个Code https://gist.github.com/anonymous/d24a7a03f7f2a771c0f2
    • hash 是一个 4 个字符长的十六进制字符串
    • 19行代码
    • 4 位长散列 = 6895 行中的 624 次冲突 = 9% 冲突率
  2. CRC16 numeric https://stackoverflow.com/a/7359753/935614
    • 功能:=CRC16NUMERIC(A1)有了这个Code https://gist.github.com/anonymous/52542c13034fe308ac2a
    • hash是一个5位长的数字
    • 92 行代码
    • 5 位长散列 = 6895 行中的 616 次冲突 = 8.9 % 冲突率
  3. CRC16 twice https://stackoverflow.com/a/14735118/935614
    • 功能:=CRC16TWICE(A1)有了这个Code https://gist.github.com/anonymous/c1206b3e17c6b01a7838
    • hash 是一个 8 个字符长的十六进制字符串
    • hash可以扩展到12/16/20等字符以进一步降低冲突率
    • 39行代码
    • 8 位长哈希 = 6895 行中 18 次冲突 = 0.23 % 冲突率
  4. SHA1 https://stackoverflow.com/a/482150/935614
    • 功能:=SHA1TRUNC(A1)有了这个Code https://gist.github.com/anonymous/573a875dac68a4af560d
    • hash 是一个 40 个字符长的十六进制字符串
    • 142 行代码
    • 可以被截断
    • 4 位数字哈希 = 6895 行中的 726 次冲突 = 10.5 % 冲突率
    • 5 位数字哈希 = 6895 行中 51 次冲突 = 0.73 % 冲突率
    • 6 位数字哈希 = 6895 行中 0 次冲突 = 0 % 冲突率
  5. SHA1 + Base64 https://stackoverflow.com/a/10068932/935614
    • 功能:=BASE64SHA1(A1)有了这个Code https://gist.github.com/anonymous/a773913ce303c713758d
    • hash 是一个 28 个字符长的 unicode 字符串(区分大小写+特殊字符)
    • 41 行代码
    • 需要 .NET,因为它使用库“Microsoft MSXML”
    • 可以被截断
    • 4 位数字哈希 = 6895 行中的 36 次冲突 = 0.5 % 冲突率
    • 5 位数字哈希 = 6895 行中 0 次冲突 = 0 % 冲突率

Here http://ge.tt/9q1jfos2是我的测试工作簿,其中包含所有示例函数和大量测试字符串。

随意添加自己的功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VBA 哈希字符串 的相关文章

  • 什么时候使用哈希表?

    什么情况下使用哈希表可以提高性能 什么情况下不能 哪些情况不适合使用哈希表 什么情况下使用哈希表可以提高性能 什么情况下不能 如果您有理由关心 请使用哈希表和您正在考虑的其他任何内容来实现 将您的实际数据放入其中 并衡量哪个性能更好 也就是
  • NGINX hashbang 重写

    我想知道 hashbang url 的位置或重写 nginx 指令会是什么样子 基本上像前端控制器一样通过 hashbang 路由所有非 hashbanged url 所以 http example com about staff 将路由至
  • 如何在 MS Word 中的每个标题末尾应用宏?

    我有一个包含各种标题的文档 因此不一定是标题 1 或标题 2 而是所有类型的标题 我想做的是编写一个宏 例如 删除每个标题末尾的 2 个空格 例如 我们有 这是一个标题 在标题的最后 我会这样做 Selection Delete Unit
  • FileDialog 保留以前的过滤器

    我正在 Access 数据库中制作表单 我需要打开文件对话框窗口几次 我只是不明白为什么在我更改选项值几次并打开文件对话框窗口后它没有更改过滤器 Public Sub Command17 Click Dim fd As FileDialog
  • schema.ini 文件不适用于 MS Access

    我有一堆 csv 文件 我通过 VBA 将它们导入到 Access 中的表中 我在与导入的 csv 文件相同的目录中还有一个 schema ini 文件 尽管在 ini 文件中字段被指定为双精度类型 但它们在 Access 中会转换为文本类
  • IE.navigate2 因保护模式关闭而失败

    我正在从 Excel VBA 自动化 IE8 Excel 2010 Windows 7 Set IE CreateObject InternetExplorer Application IE Navigate2 URL 如果 URL 是处于
  • VBA 中的 VSTO:AddIn.Object 有时不返回任何内容 (null)

    Given VSTO 插件 An override object RequestComAddInAutomationService 它返回一个名为的类的实例Facade在我的场景中 Excel 2007 中的 VBA 宏可访问AddIn O
  • 将 Python 中的 SHA 哈希计算转换为 C#

    有人可以帮我将以下两行 python 代码转换为 C 代码吗 hash hmac new secret data digestmod hashlib sha1 key hash hexdigest 8 如果您有兴趣 其余的看起来像这样 us
  • 如何处理 Workbook.SaveAs 覆盖确认上的“否”或“取消”?

    我希望在 VBA 脚本开始修改内容之前提示用户保存工作簿 当 另存为 对话框出现时 如果用户单击 取消 我会引发自定义错误并停止脚本 如果他们单击 保存 并且文件名已存在 我希望询问他们是否覆盖 这是我的代码 Function SaveCu
  • 由于直接引用范围而不是通过中间变量而导致 Excel VBA 运行时错误 450

    当我尝试直接引用某个范围内的值时 出现运行时错误 450 但如果我使用中间变量 它就会起作用 我不明白为什么 所以我担心在将来的某个时候我会再次遇到错误而不知道为什么 我尝试过使用 With End With 块 但当我直接引用范围时它仍然
  • 将包含换行符的文本文件导入到 Excel 中

    我有一个纯文本文件 如下所示 some text containing line breaks 我正在尝试说话excel 2004 Mac v 11 5 正确打开此文件 我希望只看到一个单元格 A1 包含上述所有内容 不带引号 但可惜的是
  • 使用 VBA 通过简单命令从非连续范围的并集获取值到数组中(无循环)

    我有以下任务 表面上很简单 使用 VBA 将电子表格上多个列的值复制到二维数组中 为了让生活更有趣 这些柱子并不相邻 但它们的长度都相同 显然 可以通过依次循环每个元素来做到这一点 但这看起来非常不优雅 我希望有一个更紧凑的解决方案 但我很
  • For...VBA 中的下一个循环超出限制

    我正在使用一个For Next循环填充数组 如下所示 ReDim array 1 to 100 1 to 100 For i 1 to 100 Next i But the i计数器似乎总是转到 101 而不是停止在 100 因此 这会在我
  • 为什么即使我的哈希码值相同,“==”也会返回 false

    我写了一个像这样的课程 public class HashCodeImpl public int hashCode return 1 public static void main String args TODO Auto generat
  • 查找并替换目录中所有 Excel 文件工作簿中的字符串

    我正在编写 VBA 代码来替换位于特定目录中的多个 Excel 文件 工作簿 中的特定字符串 我尝试在 Stack Overflow 上搜索 找到答案 但这与通过 Excel 中的宏替换文本文件中的字符串有关 相同的链接是查找并替换文件中的
  • Excel VBA 过滤和复制粘贴数据

    给定一个数据集 假设有 10 列 在 A 列中我有日期 在 B 列中我有 我想仅过滤 A 列 2014 年的数据 B 列 ActiveSheet Range A 1 AR 1617 AutoFilter Field 5 Operator x
  • Confluence:使用 VBA 更新现有页面

    我尝试使用 VBA 更新 Confluence 页面 我的想法是使用REST API加载页面内容 修改内容然后上传修改后的版本 这是我的代码 Private Sub TestRESTApi Dim uname As String uname
  • Word通过vba宏删除tabe列出现错误

    我想将excel中的数据复制到word表中 然后从表中删除一些列 我可以将数据复制到表中 但是当我删除列时会出现错误 无法访问此集合中的各个列 因为该表具有混合的单元格宽度 我的代码 Public Tbl1 As Table Sub cal
  • 哈希表的空间复杂度是多少?

    具有 32 位键和指向单独存储的值的 32 位指针的哈希表的大小是多少 是 2 32 个槽 4 字节 键 4 字节 指向值的指针 4 10 9 4 4 32GB 我想了解哈希表的空间复杂度 我认为你问错了问题 数据结构的空间复杂度表示它占用
  • Outlook 无法识别一个或多个姓名

    我有以下 vba 代码 它读取邮箱并向任何发送无效代码作为邮箱回复的用户发送回复 但有时会收到运行时错误 Outlook 无法识别一个或多个名称 我的问题是 创建新的 MAPI 配置文件是否可以解决该问题 或者我是否需要添加一个代码来解析地

随机推荐

  • 在我的 math.h 中找不到 log2?

    我正在使用相当新安装的 Visual C 2008 Express 我正在尝试编译一个使用 log2 函数的程序 该程序是通过在 Mac 上使用 Eclipse 找到的 但是这台 Windows 计算机找不到该函数 错误 C3861 log
  • 通过 Segue 传递数据 (swift 2)

    这是一个小费计算器项目 它必须有一个设置视图 我可以在其中选择默认小费率 我在传递数据时遇到一些问题 当我选择默认小费百分比时 它在视图控制器中不会更改 而且我想让应用程序在关闭应用程序并重新打开时记住默认费率 如果有人纠正我的代码并对其进
  • 具有一个参数的多个构造函数

    因此 在学校我们接到了一项作业 用 OOP 制造一辆汽车 到目前为止 这一切都非常简单和直接 但现在我需要创建四个构造函数 一个不带参数 两个带一个参数 一个带两个参数 据我所知 重载的工作方式是检查您提供的参数数量 然后检查它必须使用哪个
  • ChartJS:图表不显示所有数据

    由于某种原因 该图表没有显示数组中的最后两个数据 var data labels Brasil Argentina Chile Paraguai Peru Bol via M xico datasets data 9 19 7 77 6 8
  • AWS API Gateway 始终返回 502 bad gateway

    我在 AWS 中创建了一个简单的 lambda 函数 它从 DynamoDB 返回列表 我还创建了 API Gateway 来触发 lambda 函数 当我在 AWS 控制台中测试时 该函数运行良好 但是当我在 Postman 中测试此功能
  • 如何删除 lambda 事件处理程序 [重复]

    这个问题在这里已经有答案了 我最近发现我可以使用 lambda 来创建简单的事件处理程序 例如 我可以订阅这样的点击事件 button Click s e gt MessageBox Show Woho 但你如何取消订阅呢 C 规范明确指出
  • 如何在文本中定义人名(Java)

    我有一些输入文本 其中包含一个或多个人名 我没有这些名字的字典 哪个 Java 库可以帮助我根据输入文本定义名称 我浏览了 OpenNLP 但没有找到任何示例或指南 或者至少没有找到如何将其应用到我的代码中的描述 我看到了 javadoc
  • AttributeError:“TimedeltaProperties”对象没有属性“分钟”

    我有一个看起来像这样的数据框 df output date time 2020 02 28 00 30 45 2020 02 28 00 30 45 2020 03 09 00 21 06 2020 03 09 00 21 06 2020
  • 应用程序退出,退出代码为 -1073740771

    我有一个 WPF 应用程序 有时会以退出代码 1073740771 退出 该问题不会以任何模式出现 并且因系统而异 在某些系统中 该问题的发生率不到总案例的 10 而在其他系统中 我发现该问题的发生率几乎占总案例的 30 我无法形成任何可靠
  • UIImagePickerController 选择视频会阻止 MPMoviePlayerViewController 实例工作

    我有一个视图控制器 我在其中呈现UIImagePickerController在弹出窗口中 如果用户选择视频 则关闭弹出窗口并移至下一个 页面 视图控制器 并尝试使用以下方式播放任何电影MPMoviePlayerViewController
  • 如何将图片转换为html?

    有没有办法将图像转换为html相当于图像 通过有一个html表分为许多单元格 每个单元格都有特定的背景颜色 就像图像中的像素一样 很像 ASCII 艺术 我认为这是一种在电子邮件签名中包含公司徽标的方法 而不必担心电子邮件客户端阻止图像 是
  • 每个数据库提供程序类型允许的最大参数数是多少?

    可以传递到 Sql Server 查询 即通过 ADO Net 的参数限制为 2 100 个 但是 Net 开发人员使用的其他常见数据库的记录限制是什么 特别是我感兴趣的是 甲骨文10g 11g MySql PostgreSQL Sqlit
  • JavaFX 偶发渲染问题 - 按钮/控件消失

    我有一个 Java JavaFX 应用程序部署为 Windows 和 Mac 的本机安装 目前捆绑的运行时间为 8 121 您可以在此处找到安装程序和 Java 代码 乔治下载 http www george andante no down
  • 基于 SML 的文件查找

    有没有办法使用 SML Basis 库在特定位置打开文件 也就是说 使用操作系统调用来更改位置 而不是扫描文件并丢弃数据 这很棘手 不幸的是 不直接支持搜索 此外 文件位置仅对于二进制文件是透明的 即您使用BinIO结构 1 对于该结构体
  • 如何获取两个列表并将它们组合起来排除任何重复项?

    我想从两个单独的独特项目列表中创建一个列表 还有其他类似的问题 但似乎没有任何问题涉及有效地解决这个问题 因为列表有几百万个项目长 完全无关 我是唯一一个讨厌标签建议框掩盖 发布你的问题 按钮的人吗 Use a set gt gt gt f
  • Protractor / Selenium XHR 保持“待处理”状态

    我正在使用 Protractor 和 selenium 来测试我的 Angular 页面 在某些随机点 它只是停止执行 因为 XHR 请求仍处于 待处理 状态 在 Chrome 开发工具中 当我复制请求 URL 这是一个简单的 GET 请求
  • 如何从 Eclipse 在 jetty 8 上运行 Web 服务 Maven 项目?

    我有一个之前创建并部署在 Tomcat7 中的 REST Web 服务 按照建议 我想将其部署在 Jetty 上在上一个问题中 https stackoverflow com questions 11691036 is it possibl
  • 使用 HTML5 服务器事件和 Java Servlet 时如何防止 net::ERR_INCOMPLETE_CHUNKED_ENCODING?

    我刚刚开始玩服务器事件 遇到了一条我想了解的 chrome 错误消息 我很快在网上搜索 但没有找到解释 所以我想我可能做了一些非常错误的事情 在服务器端 我有一个简单的 servlet 它接受请求并创建一个虚拟事件创建器任务 private
  • Rails 4:如何访问 ActiveRecord_Relation-Object 的属性?

    我有一个国家模型和一个游记模型 一个国家有很多游记 一篇游记属于一个国家 在 Rails 控制台中 TravelNote published country 248
  • VBA 哈希字符串

    如何使用 Excel VBA 获取长字符串的短哈希 给予什么 输入字符串不超过80个字符 有效输入字符为 0 9 A Z 有效输出字符为 0 9 AZ az 大小写均可 输出哈希值不应超过 12 个字符 越短越好 根本不需要唯一 因为这会导