Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];

Вниз

CRC32   Найти похожие ветки 

 
INJCAL   (2007-06-14 16:27) [0]

unit uCrc32;

interface

uses
 classes, Sysutils, Dialogs;

function FileCRC32(const FileName: string): Cardinal;
function UpdateCRC32(InitCRC: Cardinal; BufPtr: Pointer; Len: Word): LongInt;

implementation

type
 CRCTable = array[0..255] of Cardinal;

const
 BufLen = 32768;

 CRC32Table: CRCTable =
 ($00000000, $77073096, $EE0E612C, $990951BA,
   $076DC419, $706AF48F, $E963A535, $9E6495A3,
   $0EDB8832, $79DCB8A4, $E0D5E91E, $97D2D988,
   $09B64C2B, $7EB17CBD, $E7B82D07, $90BF1D91,

   $1DB71064, $6AB020F2, $F3B97148, $84BE41DE,
   $1ADAD47D, $6DDDE4EB, $F4D4B551, $83D385C7,
   $136C9856, $646BA8C0, $FD62F97A, $8A65C9EC,
   $14015C4F, $63066CD9, $FA0F3D63, $8D080DF5,

   $3B6E20C8, $4C69105E, $D56041E4, $A2677172,
   $3C03E4D1, $4B04D447, $D20D85FD, $A50AB56B,
   $35B5A8FA, $42B2986C, $DBBBC9D6, $ACBCF940,
   $32D86CE3, $45DF5C75, $DCD60DCF, $ABD13D59,

   $26D930AC, $51DE003A, $C8D75180, $BFD06116,
   $21B4F4B5, $56B3C423, $CFBA9599, $B8BDA50F,
   $2802B89E, $5F058808, $C60CD9B2, $B10BE924,
   $2F6F7C87, $58684C11, $C1611DAB, $B6662D3D,

   $76DC4190, $01DB7106, $98D220BC, $EFD5102A,
   $71B18589, $06B6B51F, $9FBFE4A5, $E8B8D433,
   $7807C9A2, $0F00F934, $9609A88E, $E10E9818,
   $7F6A0DBB, $086D3D2D, $91646C97, $E6635C01,

   $6B6B51F4, $1C6C6162, $856530D8, $F262004E,
   $6C0695ED, $1B01A57B, $8208F4C1, $F50FC457,
   $65B0D9C6, $12B7E950, $8BBEB8EA, $FCB9887C,
   $62DD1DDF, $15DA2D49, $8CD37CF3, $FBD44C65,

   $4DB26158, $3AB551CE, $A3BC0074, $D4BB30E2,
   $4ADFA541, $3DD895D7, $A4D1C46D, $D3D6F4FB,
   $4369E96A, $346ED9FC, $AD678846, $DA60B8D0,
   $44042D73, $33031DE5, $AA0A4C5F, $DD0D7CC9,

   $5005713C, $270241AA, $BE0B1010, $C90C2086,
   $5768B525, $206F85B3, $B966D409, $CE61E49F,
   $5EDEF90E, $29D9C998, $B0D09822, $C7D7A8B4,
   $59B33D17, $2EB40D81, $B7BD5C3B, $C0BA6CAD,

   $EDB88320, $9ABFB3B6, $03B6E20C, $74B1D29A,
   $EAD54739, $9DD277AF, $04DB2615, $73DC1683,
   $E3630B12, $94643B84, $0D6D6A3E, $7A6A5AA8,
   $E40ECF0B, $9309FF9D, $0A00AE27, $7D079EB1,

   $F00F9344, $8708A3D2, $1E01F268, $6906C2FE,
   $F762575D, $806567CB, $196C3671, $6E6B06E7,
   $FED41B76, $89D32BE0, $10DA7A5A, $67DD4ACC,
   $F9B9DF6F, $8EBEEFF9, $17B7BE43, $60B08ED5,

   $D6D6A3E8, $A1D1937E, $38D8C2C4, $04FDFF252,
   $D1BB67F1, $A6BC5767, $3FB506DD, $048B2364B,
   $D80D2BDA, $AF0A1B4C, $36034AF6, $041047A60,
   $DF60EFC3, $A867DF55, $316E8EEF, $04669BE79,

   $CB61B38C, $BC66831A, $256FD2A0, $5268E236,
   $CC0C7795, $BB0B4703, $220216B9, $5505262F,
   $C5BA3BBE, $B2BD0B28, $2BB45A92, $5CB36A04,
   $C2D7FFA7, $B5D0CF31, $2CD99E8B, $5BDEAE1D,

   $9B64C2B0, $EC63F226, $756AA39C, $026D930A,
   $9C0906A9, $EB0E363F, $72076785, $05005713,
   $95BF4A82, $E2B87A14, $7BB12BAE, $0CB61B38,
   $92D28E9B, $E5D5BE0D, $7CDCEFB7, $0BDBDF21,

   $86D3D2D4, $F1D4E242, $68DDB3F8, $1FDA836E,
   $81BE16CD, $F6B9265B, $6FB077E1, $18B74777,
   $88085AE6, $FF0F6A70, $66063BCA, $11010B5C,
   $8F659EFF, $F862AE69, $616BFFD3, $166CCF45,

   $A00AE278, $D70DD2EE, $4E048354, $3903B3C2,
   $A7672661, $D06016F7, $4969474D, $3E6E77DB,
   $AED16A4A, $D9D65ADC, $40DF0B66, $37D83BF0,
   $A9BCAE53, $DEBB9EC5, $47B2CF7F, $30B5FFE9,

   $BDBDF21C, $CABAC28A, $53B39330, $24B4A3A6,
   $BAD03605, $CDD70693, $54DE5729, $23D967BF,
   $B3667A2E, $C4614AB8, $5D681B02, $2A6F2B94,
   $B40BBE37, $C30C8EA1, $5A05DF1B, $2D02EF8D);

var
 Buf: array[1..BufLen] of Byte;

function UpdateCRC32(InitCRC: Cardinal; BufPtr: Pointer; Len: Word): LongInt;
var
 crc: Cardinal;
 index: Integer;
 i: Cardinal;
begin
 crc := InitCRC;
 for i := 0 to Len - 1 do
 begin
   index := (crc xor Cardinal(Pointer(Cardinal(BufPtr) + i)^)) and $000000FF;
   crc := (crc shr 8) xor CRC32Table[index];
 end;
 Result := crc;
end;

function FileCRC32(const FileName: string): Cardinal;
var
 InFile: TFileStream;
 crc32: Cardinal;
 Res: Integer;
 BufPtr: Pointer;
begin
 BufPtr := @Buf;
 crc32 := $FFFFFFFF;
 try
   InFile := TFileStream.Create(FileName, fmShareDenyNone);
   Res := InFile.Read(Buf, BufLen);
   while (Res <> 0) do
   begin
     crc32 := UpdateCrc32(crc32, BufPtr, Res);
     Res := InFile.Read(Buf, BufLen);
   end;
   InFile.Destroy;
 except
   on E: Exception do
   begin
     if Assigned(InFile) then
       InFile.Free;
     ShowMessage(Format("При обработке файла [%s] вышла " +
       "вот такая oшибочка [%s]", [FileName, E.Message]));
   end;
 end;
 Result := not crc32;
end;

end.


 
Anatoly Podgoretsky ©   (2007-06-14 16:34) [1]

> INJCAL  (14.06.2007 16:27:00)  [0]

Счастьем делишься?


 
Jeer ©   (2007-06-14 16:50) [2]

Это боты работают.
Возможно, что боты же и отвечают.


 
INJCAL   (2007-06-15 11:48) [3]

Я слышал что есть такое понятие как CRC64 это что?


 
tesseract ©   (2007-06-15 11:54) [4]


> Я слышал что есть такое понятие как CRC64 это что?


тоже самое только основание не 4 байта, а 8.


 
Сергей М. ©   (2007-06-15 11:54) [5]


> CRC64 это что?


Это 64-битная циклическая контрольная сумма.


 
Jeer ©   (2007-06-15 14:29) [6]


> Сергей М. ©   (15.06.07 11:54) [5]


Угу.. причем реализаций в кольце неприводимых многочленов имеется множество.
Это к тому, что результат моейной CRC64 возможно отличается от результата евойной CRC64


 
Сергей М. ©   (2007-06-15 14:31) [7]


> Jeer ©   (15.06.07 14:29) [6]


Тоже самое касается и CRC32


 
Jeer ©   (2007-06-15 14:41) [8]

Есс-но:))


 
Anatoly Podgoretsky ©   (2007-06-15 16:05) [9]

> Сергей М.  (15.06.2007 14:31:07)  [7]

Любого CRC, поэтому желательно MD5


 
Германн ©   (2007-06-15 17:24) [10]


> INJCAL   (15.06.07 11:48) [3]
>
> Я слышал что есть такое понятие как CRC64 это что?
>

А ещё есть и CRC8 и CRC16. Мне лично CRC8 хватает под завязку :)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.044 c
2-1185875949
Denni
2007-07-31 13:59
2007.08.26
String to Hex


2-1185793171
savyhinst
2007-07-30 14:59
2007.08.26
TOleContainer CopyToClipboard


15-1185700339
IMHO
2007-07-29 13:12
2007.08.26
Что вы выбираете в своей жизни?


2-1185786383
tytus
2007-07-30 13:06
2007.08.26
MS Excel - Как закрасить диапазон ячеек ?


15-1185904129
Женек
2007-07-31 21:48
2007.08.26
Луна





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский