首页 > 代码库 > CRC-CCITT (0xFFFF) delphi实现

CRC-CCITT (0xFFFF) delphi实现

由于要和java的服务沟通,最终确定要实现的是:

width=16

poly=0x1021

init=0xffff

refin=false

refout=false

xorout=0x0000

check=0x29b1

residue=0x0000

name="CRC-16/CCITT-FALSE"

 

网络找了很多,结果结果对不上

下载了工具,都不是想要的,最终找到校验在线网址:

 

https://www.lammertbies.nl/comm/info/crc-calculation.html

 

 

实现代码:

function CRC16_CCITT_0xFFFF(bytes: TBytes): Word;
const
polynomial = $1021;
var
crc: Word;
I, J: Integer;
b: Byte;
bit, c15: Boolean;
begin
crc := $FFFF; // initial value
for I := 0 to High(bytes) do
begin
b := bytes[I];
for J := 0 to 7 do
begin
bit := (((b shr (7-J)) and 1) = 1);
c15 := (((crc shr 15) and 1) = 1);
crc := crc shl 1;
if (c15 xor bit) then crc := crc xor polynomial;
end;
end;

Result := crc and $ffff;
end;

 

当然如果字符串过长,则需要查表法实现,

https://www.libcrc.org/download/

给了c的实现。

CRC-CCITT (0xFFFF) delphi实现