【问题标题】:Error correcting code纠错码
【发布时间】:2012-10-23 09:25:31
【问题描述】:

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

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

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

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

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

有什么想法吗?谢谢!

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    我很想听听任何人在这种方法上可能遇到的任何问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      相关资源
      最近更新 更多