对于允许银行/电汇的支付系统,我需要将付款与相应的用户帐户可靠地关联起来。为此,用户应在与其帐户关联的转账中包含一个参考号。
我想生成带有内置冗余(额外符号)的数字,以便我可以检测并纠正最多 N 个以下(可能是常见的)错误:
我搜索了一下,似乎 Reed Solomon 或 BCH 是常用的代码。我唯一找不到的是他们是否支持最后一种情况,即额外的符号。
另外,我希望代码有一个故障模式,其中显示:“这太糟糕了,我无法修复它”,而不是给我一个随机的“更正”结果。我想我可以简单地通过生成稀疏参考数字并希望它不太可能意外命中有效参考数字来做到这一点,但我宁愿有这样的东西:“我可以纠正最多 5 个错误,但如果它是超过3,我放弃。”
有什么想法吗?谢谢!
我还没有花太多时间进一步研究这个问题,但我想我已经想出了一个初步的方法来解决这个问题,我现在将继续追求:
我将使用 32 个字符的字母表创建帐户参考号。我将把这个字母表分成 2 组,每组 16 个字符,优化这些组,以最大限度地减少随机拼写错误从另一组中产生字母的可能性。例如,只需将键盘分成两半,使用带有角的框中的字母 [1]、[4]、[v]、[z] 作为一组,使用其他字母作为另一组。
然后我将使用 [14, 8, 7]16 Reed-Solomon 代码对 32 位帐号进行编码,我首先将其拆分为 8 个 4 位字符。
由此产生的消息,我将通过从第一个字母半部分中选择第一个、第三个、第五个……字符以及从第二个字母半部分中选择其他字符来转换为参考号。这样,如果我检测到任何交换、额外或丢失的字符,我可以“重新同步”参考号。
重新同步后,RS 代码应该允许我纠正最多 3 个其他拼写错误,如果有人犯的错误比这更多,他们应该遇到付款问题......:)
我很想听听任何人对这种方法的评论。
查找并标记错误很好,但更改用户输入的内容听起来在法律上是可疑的。
鉴于您想要查找输入错误,Damm 算法 可能很有用。它在同一字母表中添加一个额外的符号(与 ISBN 校验位不同)。