有奖竟猜,关于效验码的问题。(200分)

  • 主题发起人 主题发起人 crazycock
  • 开始时间 开始时间
C

crazycock

Unregistered / Unconfirmed
GUEST, unregistred user!
A:2,124,143,0,1,0,25,245,57,128,3,255,255,255,162,206,75,0,
B:2,123,140,0,2,0,25,245,57,128,3,255,255,255,162,206,75,0,

A:2,238,35,0,3,0,43,109,60,128,2,255,255,255,162,206,75,0,
B:2,237,36,0,4,0,43,109,60,128,2,255,255,255,162,206,75,0,

A:2,59,38,0,2,0,239,243,108,128,3,255,255,255,145,162,70,8,96,0,37,35,76,86,0,41,
B:2,58,39,0,3,0,239,243,108,128,3,255,255,255,145,162,70,8,96,0,37,35,76,86,0,41,

A:2,19,166,0,4,0,41,156,85,128,2,255,255,255,114,232,70,8,96,0,41,8,190,54,0,34,
B:2,18,167,0,5,0,41,156,85,128,2,255,255,255,114,232,70,8,96,0,41,8,190,54,0,34,

A:2,180,231,0,1,0,25,245,58,0,3,255,255,255,223,26,8,1,0,
B:2,179,228,0,2,0,25,245,58,0,3,255,255,255,223,26,8,1,0,

A:2,89,196,0,2,0,239,243,109,0,3,255,255,255,133,198,9,1,0,
B:2,88,197,0,3,0,239,243,109,0,3,255,255,255,133,198,9,1,0,

A:2,150,79,0,2,0,239,243,110,0,3,255,255,255,106,162,10,1,0,
B:2,149,78,0,3,0,239,243,110,0,3,255,255,255,106,162,10,1,0,

A:2,20,73,0,2,0,239,243,111,128,3,255,255,255,208,129,70,8,96,0,40,35,77,87,0,42,
B:2,19,72,0,3,0,239,243,111,128,3,255,255,255,208,129,70,8,96,0,40,35,77,87,0,42,

A:2,74,127,0,1,0,25,245,59,0,3,255,255,255,206,147,8,1,1,
B:2,73,124,0,2,0,25,245,59,0,3,255,255,255,206,147,8,1,1,

A:2,189,64,0,2,0,239,243,112,0,3,255,255,255,148,79,9,1,1,
B:2,188,65,0,3,0,239,243,112,0,3,255,255,255,148,79,9,1,1,

A:2,248,201,0,2,0,239,243,113,0,3,255,255,255,123,43,10,1,1,
B:2,247,200,0,3,0,239,243,113,0,3,255,255,255,123,43,10,1,1,

A:2,201,192,0,1,0,25,245,60,0,255,255,255,255,79,61,99,0,
B:2,200,195,0,2,0,25,245,60,0,255,255,255,255,79,61,99,0,

A:2,241,62,0,0,1,109,248,60,0,255,255,255,255,132,129,104,4,0,0,0,255,
B:2,240,63,0,1,1,109,248,60,0,255,255,255,255,132,129,104,4,0,0,0,255,
以上这些数据是采集回来的,目前可以猜测第2、3位是他们的效验码,而且已经知道他们
产品中有这么样的一个效验公式如下(面向客户的协议):
Function VESDA_CRC(crcstr:String;len:Integer):Word;
var
q:Word;
i:integer;
tmp:Word;
wantCRC:Word;
begin
wantCRC := 0;
for i:= 1 to len do begin
tmp:=ord(crcstr);
q:=(wantCRC xor tmp) and 15;
wantcrc:=(wantcrc shr 4) xor (q*4225);//4225
q:=(wantcrc xor (tmp shr 4)) and 15;
wantcrc:=(wantcrc shr 4) xor (q*4225);
end;
Result:= wantcrc;
end;
由于我需要做的部分并没有面对客户公开,所以也没有公开效验的公式和需要效验的内容,
所以只好猜测了。希望大家慷慨相助。
提示一点:A,B对应的两条内容只有1个字符有差别,他们的效验码有一点轻微差别,高手能
不能发现些什么有用的信息呢?
在线等待……
 
我发现了,第二个数字A-B=1,第三个数字A-B=-1 or 1 or 3,其余数字相同
这又怎么了,赫赫,我不太明白
 
谢谢关心,还能看出一些什么呢?
 
CRC循环冗余码的编码
首先将一个r次多项式与一个r+1位的二进制位串对应,如CRC16=X16 + X15 + X2 + 1 则对应一个17位的二进制位串1,1000,0000,0000,0101。
对一个K位数据,用r次的冗余多项式编码将产生r位的冗余码。
冗余码的具体内容就是K位数据除以r次冗余码多项式对应位串数据的余数(其中除法为模二除)。
例如:数据为1101,冗余多项式为X4 + X3 +1 ,则应产生4位CRC冗余码,计算过程先将11010000除以X4 + X3 + 1,得1。所以编码后的内容为11010001。注意除法中的减法是模2减,即两位相同则减为0,不同则为1。

你的题目只要求用CRC16编码0x03,而未给出具体的CRC多项式。我只好用常用的两组数据给以解答了。

X16 + X15 + X2 +1,0x03编码得到0x0003000a;
X16 + X12 + X5 +1,0x03编码得到0x00031025。
=======================
以上是网上查找到的一段内容,我觉得迷惑的是,“计算过程先将11010000除以X4 + X3 + 1,得1”,得1?
怎么得出来的呀?另外,“除法中的减法是模2减,即两位相同则减为0,不同则为1”,当0减1的时候,不够的话,
是否要借位啊?我怎么老看不懂作者的意思呢?
 
谢谢捧场,散分……
 

Similar threads

S
回复
0
查看
835
SUNSTONE的Delphi笔记
S
S
回复
0
查看
765
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部