function crc16(s: string; len: integer): string;
var
flag, c, crc: word;
i, j: integer;
begin
crc := $FFFF;
for i := 1 to (len div 2) do
begin
c := strtoint('$' + copy(s, (2 * i - 1), 2)); //16进制转10进制,每两位
crc := crc xor c;
for j := 1 to 8 do
begin
flag := crc and 1;
crc := crc shr 1;
if flag = 1 then crc := crc xor $A001;
end;
end;
result := IntToHex(crc, 2);
end;
Private Function CrcResult(ByVal Data As Long, ByVal Genpoly As Long, ByVal CrcData As Long) As Long
Dim n As Integer
Data = Data * 2
For n = 8 To 1 Step -1
Data = Fix(Data / 2)
If ((Data Xor CrcData) And 1) Then
CrcData = Fix(CrcData / 2) Xor Genpoly
Else
CrcData = Fix(CrcData / 2)
End If
Next n
CrcResult = CrcData
End Function