4

对于允许银行/电汇的支付系统,我需要可靠地将支付与它们所针对的相应用户帐户相关联。为此,用户应在与他的帐户关联的转账中包含一个参考号。

我想用内置冗余(额外符号)生成这个数字,这样我就可以检测和纠正最多 N 个以下(可能是常见的)错误:

  • 序列中的符号不​​正确(错字)
  • 两个符号的交换(我猜这与两个不正确的符号相同)
  • 序列中缺少符号
  • 序列中的额外符号

我搜索了一下,似乎 Reed Solomon 或 BCH 是常用的代码。我唯一找不到的是它们是否支持最后一种情况,即额外的符号。

另外,我希望代码有一个故障模式,它说:“这太糟糕了,我无法修复它”,而不是给我一个随机的“更正”结果。我想我可以简单地通过生成稀疏的参考号来做到这一点,并希望它不太可能意外地碰到一个有效的参考号,但我宁愿有这样的东西:“我最多可以纠正 5 个错误,但如果它是超过3个,我放弃。”

有什么想法吗?谢谢!

4

1 回答 1

1

我还没有花太多时间进一步研究这个问题,但我想我已经想出了一个初步的方法来解决这个问题,我现在将继续研究:

我将使用 32 个字符的字母创建帐户参考号。我将把这个字母分成两组,每组 16 个字符,优化这些组以最小化随机拼写错误产生另一组字母的机会。例如,只需将键盘一分为二,使用带有角 [1]、[4]、[v]、[z] 的框中的字母作为一组,将其他字母作为另一组。

然后,我将使用 [14, 8, 7] 16 Reed-Solomon 代码对 32 位帐号进行编码,我首先将其拆分为 8 个 4 位字符。

生成的消息,我将通过从第一个半字母表中选择第 1 个、第 3 个、第 5 个……字符以及从第 2 个半字母表中选择其他字符来转换为参考号。这样,如果我检测到任何交换的、额外的或丢失的字符,我就可以“重新同步”参考号。

重新同步后,RS 代码应该允许我更正多达 3 个其他拼写错误,如果有人犯了更多错误,他们应该遇到付款问题...... :)

我很想听听任何人对这种方法的任何评论。

于 2012-11-15T04:54:49.467 回答