【问题标题】:CRC algorithm resulting into values of less than 16 bitCRC 算法产生小于 16 位的值
【发布时间】:2023-03-30 18:39:01
【问题描述】:

对于人类友好的“校验和”值,我只喜欢生成 0 到 99 范围内的值。

输入是一串 ASCII 字符(主要是 a-z 和 0-9)。

我认为我应该为此使用某种 CRC 算法,但我想知道如何通过平衡的校验和结果获得最佳结果。

我能想象到的最便宜的技术是计算 CRC-16 或 CRC-32,然后将结果取模 100。但这并不是一个好的结果,是吗?

理想情况下,什么是一个好的(类似 CRC)算法,用于从一组 N 个不同的值(例如,如果我只使用 a-z 和 0-9,则 N = 36)对一串值进行校验和,从而产生校验和0到M-1的范围?

它不必很快,因为我正在处理小字符串。

【问题讨论】:

    标签: algorithm checksum crc


    【解决方案1】:

    循环冗余校验可以使用任意数量的输出位来完成,因此您可以使用 CRC-8 之类的东西来获取 0 到 255 之间的值(可以用两个十六进制字符表示)。有关 CRC 的更多信息,请参阅wikipedia link

    至于 CRC-32 模 100 不能得到好的结果,这取决于你认为什么“好”。对于仅仅 100 个哈希值,冲突必然会频繁发生,因此您需要权衡哈希长度和冲突风险。

    【讨论】:

      猜你喜欢
      • 2021-08-09
      • 2014-10-04
      • 1970-01-01
      • 2018-02-21
      • 1970-01-01
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多