1

我在 excel 中做的一件愚蠢的事情所以,我正在尝试在 excel 中制作 DataMatrix 条码,但遇到了麻烦。这应该读作 [FNC1] 010003592671025417220331100155BAG

但事实并非如此。将其与此处的条形码进行比较:https ://barcode.tec-it.com/en/DataMatrix?data=%5CF010003592671025417220331100155BAG

我有正确的消息位和填充,但 Reed-Solomon 代码字不匹配。我对照这个网站验证了我的数学:https ://repo.progsbase.com/repoviewer/no.inductive.libraries/ReedSolomon/latest///ComputeReadSolomonCodes/online/

任何想法我做错了什么?谁能指导我解释如何手动得出正确的 Reed-Solomon 结果?

我的数据:

232 131 130 133 189 156 20132 184 147 152 133 133 161 140 131 185 67 66 72 129 223 118 105 78 55 162 108 78 78 68 68 83 223 223 223 218 160 13910 139 190 190 190 190 33 114 0 106

工作条码数据:

232 131 130 133 189 156 201 132 184 147 152 133 161 140 131 185 67 66 72 129 223 118 226 84 3 131 93 3 162 119 52 35111 19506 19 113 1956 19

4

1 回答 1

0

你 Reed Solomon 的代码好像还可以,只是参数不一样。GF(2^8) 约简多项式是 0x12D(不是 0x11D),生成器(除法)多项式的第一个连续根是 2(不是 1)。通过这两项更改,Reed Solomon 结果与工作条码数据相匹配。

我在这个 github 存储库中找到了示例代码:

https://github.com/dmtx/libdmtx/blob/master/dmtxreedsol.c

代码使用原始多项式 301 => 0x12D,计算伴随式从 i = 1 开始,这意味着生成多项式的第一个连续根是 2^1 = 2。

   for(i = 1; i < syn->length; i++){
      for(j = 0; j < rec->length; j++) /* alternatively: j < blockTotalWords */
         syn->b[i] = GfAdd(syn->b[i], GfMultAntilog(rec->b[j], i*j));
   ...

有一个 RsGenPoly() 函数,但它已经过优化并且有点难以理解。

从我的旧 ecc 演示程序中,十六进制的根和生成多项式系数是:

vGenRoots:          02 04 08 10 20 40 80 2d 5a b4 45 8a 39 72 e4 e5 e7 e3
pGenPoly:        01 bc 5a 30 e1 fe 5e 81 6d d5 f1 3d 42 4b bc 27 64 c3 53

如果有兴趣,几年前我将旧 eccdemo 程序的源代码上传到了我的 github 存储库。有一个包含程序简要摘要的自述文件。

https://github.com/jeffareid/eccdemo8

于 2022-01-27T05:35:46.337 回答