对于允许银行/电线传输的付款系统,我需要可靠地将付款与他们预定的相应用户帐户相关联。为此,用户应包括与他的帐户关联的转移中的参考号。
我想使用内置冗余(额外符号)生成此数字,以便我可以检测并纠正以下(可能是常见)错误:
- 序列(Typo)中的不正确符号
- 两个符号的交换(我想这与两个不正确的符号相同)
- 序列中缺少符号
- extra 序列中的符号
我绕了一些搜索,似乎芦苇所罗门或BCH是常用的代码。我唯一找不到的是它们是否支持最后情况,即额外的符号。
另外,我希望代码具有失败模式,其中说:"这是如此搞砸了,我无法修复它",而不是给我一个随机的"校正"结果。我想我可以简单地通过生成稀疏的参考号来做到这一点,并希望它不太可能偶然地碰到有效的参考号,但是我宁愿有类似的事情:"我最多可以纠正5个错误,但是如果是我放弃了3个以上。"
有什么想法吗?谢谢!
我还没有花太多时间进一步研究这一点,但是我认为我想出了一种解决这个问题的初步方法,我现在将继续进行:
我将从32个字符的字母中创建帐户参考号。该字母我将分为2组16个字符,优化集合以最大程度地减少随机错字将产生另一组字母的机会。例如,只需将键盘分成两半,使用框中的字母[1],[4],[v],[z]为一组,另一个字母作为另一组。
然后,我将使用[14、8、7] 16 REED-SOLOMON代码编码32位帐号,我首先将其分为八个4位字符。由此产生的消息,我将通过选择第1个字母半half的第一个,第三,第五,第3,第5,第5,第五,其他字母的字符来转变为参考号。这样,如果我检测到任何交换,额外或缺失的字符,我可以"重新同步"参考号。
重新同步后,RS代码应该允许我纠正最多3个错别字,如果有人犯了更多的错误,他们应该遇到付款问题...:)
我很想听听任何人对这种方法的评论。