错误纠正代码

时间:2012-11-02 17:10:25

标签: redundancy error-correction error-detection reed-solomon

对于允许银行/电汇的支付系统,我需要可靠地将付款与其预定的相应用户帐户相关联。为此,用户应在与其帐户关联的转帐中包含参考号。

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

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

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

此外,我希望代码有一个失败模式,它说:“这是搞砸了,我无法解决它”,而不是给我一个随机的“纠正”结果。我想我可以简单地通过生成稀疏的参考数字来做到这一点,并希望它不太可能偶然碰到一个有效的参考数字,但我宁愿有类似的东西:“我可以纠正多达5个错误,但如果它是超过3,我放弃。“

有什么想法?谢谢!

1 个答案:

答案 0 :(得分:1)

我没有花那么多时间进一步研究这个问题,但是我想我已经想出了一个解决这个问题的初步方法,我现在要追究这个问题:

我将使用32个字符的字母表创建帐号参考号。这个字母表我将分成2组16个字符,优化这些集合以最小化随机拼写错误从另一个集合中产生字母的机会。例如,只需将键盘分成两半,使用方框中的字母,其中一个角落为[1],[4],[v],[z],另一个字母为另一个角色。

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

结果消息,我将通过选择第1个字母表中的第1个,第3个,第5个......字符以及第2个字母表中的其他字符来转换为参考号。这样,如果我检测到任何交换,额外或缺少的字符,我可以“重新同步”参考号。

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

我很想听到任何人对此方法的评论。