algorithm - 我可以使用什么算法来生成简单的人类可读的容错字符串?

标签 algorithm search fault-tolerance fuzzy-comparison

人都会犯错。 当您要求他们提供一些唯一生成的标识某些实体的 ID 时。 例如: 订单 A:具有 ID ABC1234 订单 B:具有 ID BCD1235 他们可以打错字,可以提供字符串例如:A123、B123、1 2 3、“Order id B 12/3” 然后对于自动系统来说,识别原始 ID 是一个挑战。 我的问题是是否有任何已知的算法/技术。生成一个

- 唯一的人类可读 ID(不是 sha 或 md5) -具有容错能力。您可以从字符子集中解码原始 ID。 -不区分大小写

容错的一个可视化例子是二维码,当二维码的某些部分损坏时,您仍然可以阅读消息。

目标是避免使用像 for ex 这样的工具/算法。 Elasticsearch 、levenstein 和增加解码原始 ID 的机会,即使客户输入错误,并减少提供其他一些“原始 ID”的机会。

最佳答案

除了纠错之外,这个问题有趣的部分是是否有专门设计供人类阅读和转录的代码。

RFC 3548 ,为了避免在 base32 编码中使用容易混淆的字符(1 和 L,0 和 o),做了一些考虑。 Human-oriented base-32 encoding这个概念有一些变化。

对于音频,PGP Word List旨在为每个字节赋予一个不同的词;它有两个 256 个单词的列表,一个用于偶数字节,另一个用于奇数字节(因此可以检测到丢失的字节或交换的字节),有助于防止错误。

a discussion here on SO关于人类友好的、可发音的 ID 可能很有趣,在可发音的密码(如 Diceware)上的工作有点相关。

Metafilter 也有 a discussion关于人类容易复制的代码,提供了一些更有趣的引用。

关于algorithm - 我可以使用什么算法来生成简单的人类可读的容错字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26650122/

相关文章:

flutter - 在 Android 移动应用中实现多个过滤器的简单方法

fault-tolerance - HP/Tandem NonStop 如何实现无备件的单一故障 FT?

c# - 在几天内均匀分配元素

algorithm - 为什么 IDA* 比 A* 快,但为什么 IDA* 访问的节点比 A* 更多?

python - 如何使用 Python 搜索互联网?

java - 如何在 Java 中隔离不受信任的 native 代码?

c# - 计划任务或服务的容错和可靠性最佳实践

algorithm - 我正在寻找一种算法来解决 "sliding puzzle",这是一种将图像分成 4x4 帧中的 16 block 的拼图

java - 模式匹配算法

c# - 对具有重复值的数组进行线性搜索