uses
Windows
SysUtils
Classes;
const //Crc
表
Table:Array[
] of DWORD=
( $
$
$EE
E
C
$
BA
$
DC
$
AF
F
$E
A
$
E
A
$
EDB
$
DCB
A
$E
D
E
E
$
D
D
$
B
C
B
$
EB
CBD
$E
B
D
$
BF
D
$
DB
$
AB
F
$F
B
$
BE
DE
$
ADAD
D
$
DDDE
EB
$F
D
B
$
D
C
$
C
$
BA
C
$FD
F
A
$
A
C
EC
$
C
F
$
CD
$FA
F
D
$
D
DF
$
B
E
C
$
C
E
$D
E
$A
$
C
E
D
$
B
D
$D
D
FD
$A
AB
B
$
B
A
FA
$
B
C
$DBBBC
D
$ACBCF
$
D
CE
$
DF
C
$DCD
DCF
$ABD
D
$
D
AC
$
DE
A
$C
D
$BFD
$
B
F
B
$
B
C
$CFBA
$B
BDA
F
$
B
E
$
F
$C
CD
B
$B
BE
$
F
F
C
$
C
$C
DAB
$B
D
D
$
DC
$
DB
$
D
BC
$EFD
A
$
B
$
B
B
F
$
FBFE
A
$E
B
D
$
C
A
$
F
F
$
A
E
$E
E
$
F
A
DBB
$
D
D
D
$
C
$E
C
$
B
B
F
$
C
C
$
D
$F
E
$
C
ED
$
B
A
B
$
F
C
$F
FC
$
B
D
C
$
B
E
$
BBEB
EA
$FCB
C
$
DD
DDF
$
DA
D
$
CD
CF
$FBD
C
$
DB
$
AB
CE
$A
BC
$D
BB
E
$
ADFA
$
DD
D
$A
D
C
D
$D
D
F
FB
$
E
A
$
ED
FC
$AD
$DA
B
D
$
D
$
DE
$AA
A
C
F
$DD
D
CC
$
C
$
AA
$BE
B
$C
C
$
B
$
F
B
$B
D
$CE
E
F
$
EDEF
E
$
D
C
$B
D
$C
D
A
B
$
B
D
$
EB
D
$B
BD
C
B
$C
BA
CAD
$EDB
$
ABFB
B
$
B
E
C
$
B
D
A
$EAD
$
DD
AF
$
DB
$
DC
$E
B
$
B
$
D
D
A
E
$
A
A
AA
$E
ECF
B
$
FF
D
$
A
AE
$
D
EB
$F
F
$
A
D
$
E
F
$
C
FE
$F
D
$
CB
$
C
$
E
B
E
$FED
B
$
D
BE
$
DA
A
A
$
DD
ACC
$F
B
DF
F
$
EBEEFF
$
B
BE
$
B
ED
$D
D
A
E
$A
D
E
$
D
C
C
$
FDFF
$D
BB
F
$A
BC
$
FB
DD
$
B
B
$D
D
BDA
$AF
A
B
C
$
AF
$
A
$DF
EFC
$A
DF
$
E
EEF
$
BE
$CB
B
C
$BC
A
$
FD
A
$
E
$CC
C
$BB
B
$
B
$
F
$C
BA
BBE
$B
BD
B
$
BB
A
$
CB
A
$C
D
FFA
$B
D
CF
$
CD
E
B
$
BDEAE
D
$
B
C
B
$EC
F
$
AA
C
$
D
A
$
C
A
$EB
E
F
$
$
$
BF
A
$E
B
A
$
BB
BAE
$
CB
B
$
D
E
B
$E
D
BE
D
$
CDCEFB
$
BDBDF
$
D
D
D
$F
D
E
$
DDB
F
$
FDA
E
$
BE
CD
$F
B
B
$
FB
E
$
B
$
AE
$FF
F
A
$
BCA
$
B
C
$
F
EFF
$F
AE
$
BFFD
$
CCF
$A
AE
$D
DD
EE
$
E
$
B
C
$A
$D
F
$
D
$
E
E
DB
$AED
A
A
$D
D
ADC
$
DF
B
$
D
BF
$A
BCAE
$DEBB
EC
$
B
CF
F
$
B
FFE
$BDBDF
C
$CABAC
A
$
B
$
B
A
A
$BAD
$CDD
$
DE
$
D
BF
$B
A
E
$C
AB
$
D
B
$
A
F
B
$B
BBE
$C
C
EA
$
A
DF
B
$
D
EF
D);
procedure GetCRC
File(FileName:string;var CRC
:DWORD);
function GetCrc
Str(s: string; Seed: LongInt):string;
implementation
procedure GetCRC
File(FileName:string;var CRC
:DWORD);
var
F:file;
BytesRead:DWORD;
Buffer:array[
] of Byte;
i:Word;
begin
FileMode :=
;
CRC
:=$ffffffff;
{$I
}
AssignFile(F
FileName);
Reset(F
);
if IoResult =
then
begin
repeat
BlockRead(F
Buffer
Sizeof(Buffer)
BytesRead);
for i :=
to BytesRead do
CRC
:= (CRC
shr
) xor Table[Buffer[i] xor (CRC
and $
ff)];
until BytesRead =
;
end;
CloseFile(F);
{$I+}
CRC
:= not CRC
;
end;
function GetCrc
Str(s: string; Seed: LongInt):string;
var
Count: Integer;
CrcVal: LongInt;
begin
CrcVal := Seed;
for Count :=
to Length(s) do
CrcVal := Table[Byte(CrcVal xor DWORD(Ord(s[Count])))] xor ((CrcVal shr
) and $
FFFFFF);
Result := IntToHex(not(CrcVal)
);
end;
end
調用
uses Crc
;
procedure TForm
Button
Click(Sender: TObject);
begin
Edit
Text:=GetCrc
Str(
);//這裡取指定字符串的CRC
校驗值;
end;
procedure TForm
Button
Click(Sender: TObject);
var
FileStr:String;
crc: DWORD;
begin
FileStr:=Application
ExeName;//這裡取指定的文件的crc
校驗值;
GetCRC
File(FileStr
crc);
if crc<>
then
Edit
Text:=PChar(IntToHex(crc
));
end;
From:http://tw.wingwit.com/Article/program/Delphi/201311/24674.html