小李子

小小的蜗牛,慢慢的爬。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

delphi编程CRC算法的实现,以下是全部的代码

Posted on 2012-03-19 13:26  ljl_falcon  阅读(323)  评论(0编辑  收藏  举报
  1. uses  
  2.   Windows,SysUtils,Classes;  
  3. const  //Crc32表  
  4.   Table:Array[0..255of DWORD=  
  5.   ( $00000000,  $77073096$EE0E612C$990951BA,  
  6.     $076DC419$706AF48F$E963A535$9E6495A3,  
  7.     $0EDB8832$79DCB8A4$E0D5E91E$97D2D988,  
  8.     $09B64C2B$7EB17CBD$E7B82D07$90BF1D91,  
  9.     $1DB71064$6AB020F2$F3B97148$84BE41DE,  
  10.     $1ADAD47D$6DDDE4EB$F4D4B551$83D385C7,  
  11.     $136C9856$646BA8C0$FD62F97A$8A65C9EC,  
  12.     $14015C4F$63066CD9$FA0F3D63$8D080DF5,  
  13.     $3B6E20C8$4C69105E$D56041E4$A2677172,  
  14.     $3C03E4D1$4B04D447$D20D85FD$A50AB56B,  
  15.     $35B5A8FA$42B2986C$DBBBC9D6$ACBCF940,  
  16.     $32D86CE3$45DF5C75$DCD60DCF$ABD13D59,  
  17.     $26D930AC$51DE003A$C8D75180$BFD06116,  
  18.     $21B4F4B5$56B3C423$CFBA9599$B8BDA50F,  
  19.     $2802B89E$5F058808$C60CD9B2$B10BE924,  
  20.     $2F6F7C87$58684C11$C1611DAB$B6662D3D,  
  21.     $76DC4190$01DB7106$98D220BC$EFD5102A,  
  22.     $71B18589$06B6B51F$9FBFE4A5$E8B8D433,  
  23.     $7807C9A2$0F00F934$9609A88E$E10E9818,  
  24.     $7F6A0DBB$086D3D2D$91646C97$E6635C01,  
  25.     $6B6B51F4$1C6C6162$856530D8$F262004E,  
  26.     $6C0695ED$1B01A57B$8208F4C1$F50FC457,  
  27.     $65B0D9C6$12B7E950$8BBEB8EA$FCB9887C,  
  28.     $62DD1DDF$15DA2D49$8CD37CF3$FBD44C65,  
  29.     $4DB26158$3AB551CE$A3BC0074$D4BB30E2,  
  30.     $4ADFA541$3DD895D7$A4D1C46D$D3D6F4FB,  
  31.     $4369E96A$346ED9FC$AD678846$DA60B8D0,  
  32.     $44042D73$33031DE5$AA0A4C5F$DD0D7CC9,  
  33.     $5005713C$270241AA$BE0B1010$C90C2086,  
  34.     $5768B525$206F85B3$B966D409$CE61E49F,  
  35.     $5EDEF90E$29D9C998$B0D09822$C7D7A8B4,  
  36.     $59B33D17$2EB40D81$B7BD5C3B$C0BA6CAD,  
  37.     $EDB88320$9ABFB3B6$03B6E20C$74B1D29A,  
  38.     $EAD54739$9DD277AF$04DB2615$73DC1683,  
  39.     $E3630B12$94643B84$0D6D6A3E$7A6A5AA8,  
  40.     $E40ECF0B$9309FF9D$0A00AE27$7D079EB1,  
  41.     $F00F9344$8708A3D2$1E01F268$6906C2FE,  
  42.     $F762575D$806567CB$196C3671$6E6B06E7,  
  43.     $FED41B76$89D32BE0$10DA7A5A$67DD4ACC,  
  44.     $F9B9DF6F$8EBEEFF9$17B7BE43$60B08ED5,  
  45.     $D6D6A3E8$A1D1937E$38D8C2C4$4FDFF252,  
  46.     $D1BB67F1$A6BC5767$3FB506DD$48B2364B,  
  47.     $D80D2BDA$AF0A1B4C$36034AF6$41047A60,  
  48.     $DF60EFC3$A867DF55$316E8EEF$4669BE79,  
  49.     $CB61B38C$BC66831A$256FD2A0$5268E236,  
  50.     $CC0C7795$BB0B4703$220216B9$5505262F,  
  51.     $C5BA3BBE$B2BD0B28$2BB45A92$5CB36A04,  
  52.     $C2D7FFA7$B5D0CF31$2CD99E8B$5BDEAE1D,  
  53.     $9B64C2B0$EC63F226$756AA39C$026D930A,  
  54.     $9C0906A9$EB0E363F$72076785$05005713,  
  55.     $95BF4A82$E2B87A14$7BB12BAE$0CB61B38,  
  56.     $92D28E9B$E5D5BE0D$7CDCEFB7$0BDBDF21,  
  57.     $86D3D2D4$F1D4E242$68DDB3F8$1FDA836E,  
  58.     $81BE16CD$F6B9265B$6FB077E1$18B74777,  
  59.     $88085AE6$FF0F6A70$66063BCA$11010B5C,  
  60.     $8F659EFF$F862AE69$616BFFD3$166CCF45,  
  61.     $A00AE278$D70DD2EE$4E048354$3903B3C2,  
  62.     $A7672661$D06016F7$4969474D$3E6E77DB,  
  63.     $AED16A4A$D9D65ADC$40DF0B66$37D83BF0,  
  64.     $A9BCAE53$DEBB9EC5$47B2CF7F$30B5FFE9,  
  65.     $BDBDF21C$CABAC28A$53B39330$24B4A3A6,  
  66.     $BAD03605$CDD70693$54DE5729$23D967BF,  
  67.     $B3667A2E$C4614AB8$5D681B02$2A6F2B94,  
  68.     $B40BBE37$C30C8EA1$5A05DF1B$2D02EF8D);  
  69.    procedure GetCRC32File(FileName:string;var CRC32:DWORD);  
  70.    function GetCrc32Str(s: string; Seed: LongInt):string;  
  71.     
  72. implementation  
  73.    
  74. procedure GetCRC32File(FileName:string;var CRC32:DWORD);  
  75. var  
  76.   F:file;  
  77.   BytesRead:DWORD;  
  78.   Buffer:array[1..65521of Byte;  
  79.   i:Word;  
  80. begin  
  81.   FileMode :=0;  
  82.   CRC32 :=$ffffffff;  
  83.   {$I-}  
  84.   AssignFile(F,FileName);  
  85.   Reset(F,1);  
  86.   if IoResult = 0 then  
  87.     begin  
  88.       repeat  
  89.       BlockRead(F,Buffer,Sizeof(Buffer),BytesRead);  
  90.       for i := 1 to BytesRead do  
  91.         CRC32 := (CRC32 shr 8xor Table[Buffer[i] xor (CRC32 and $000000ff)];  
  92.       until BytesRead = 0;  
  93.     end;  
  94.   CloseFile(F);  
  95.   {$I+}  
  96.   CRC32 := not CRC32;  
  97. end;  
  98.      
  99. function GetCrc32Str(s: string; Seed: LongInt):string;  
  100. var  
  101.   Count: Integer;  
  102.   CrcVal: LongInt;  
  103. begin  
  104.   CrcVal := Seed;  
  105.   for Count := 1 to Length(s) do  
  106.     CrcVal := Table[Byte(CrcVal xor DWORD(Ord(s[Count])))] xor ((CrcVal shr 8and $00FFFFFF);  
  107.   Result := IntToHex(not(CrcVal), 8);  
  108. end;  
  109. end.  
  110.    
  111. 调用:  
  112. uses Crc32;  
  113. procedure TForm1.Button1Click(Sender: TObject);  
  114. begin  
  115.   Edit1.Text:=GetCrc32Str('11111111',8);//这里取指定字符串的CRC32校验值;  
  116. end;  
  117. procedure TForm1.Button2Click(Sender: TObject);  
  118. var  
  119.   FileStr:String;  
  120.   crc: DWORD;   
  121. begin  
  122.   FileStr:=Application.ExeName;//这里取指定的文件的crc32校验值;  
  123.   GetCRC32File(FileStr,crc);  
  124.   if crc<>0 then  
  125.     Edit2.Text:=PChar(IntToHex(crc,6));  
  126. end;