home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 5_2007-2008.ISO / data / Zips / Simple_Mac211504642008.psc / class / clsCRC32.cls next >
Text File  |  2008-06-02  |  14KB  |  415 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "clsGetCRC32"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Option Explicit
  15.  
  16. 'Author         : Noel A. Dacara (noeldacara@yahoo.com)
  17. 'Filename       : Checksum CRC32.cls (cCRC32 Class Module)
  18. 'Description    : Calculate CRC32 Checksum of a file or string
  19. 'Date           : Tuesday, March 01, 2005, 06:13 PM
  20. 'Last Update    : Friday, November 25, 2005, 12:18 AM
  21.  
  22. 'You can freely use and distribute this class or upload these codes on any site
  23. 'provided that the original credits are kept unmodified.
  24.  
  25. 'Credits goes to:
  26. 'Fredrik Qvarfort ⌐ 2000, CRC Checksum Class using a precompiled assembler code
  27.  
  28. 'API Declaration
  29. Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  30.  
  31. 'Variable Declarations
  32. Private m_CRC32Asmbl() As Byte
  33. Private m_CRC32Table(0 To 255) As Long
  34.  
  35. '//--Procedures--//
  36.  
  37. Function FileChecksum(File As String) As String
  38. 'Returns the CRC32 checksum value of a specified file.
  39.     'Make sure the file isn't empty or invalid to avoid errors later
  40.     If Len(Dir$(File)) = 0 Then
  41.         Exit Function
  42.     End If
  43.     
  44.     On Error GoTo Err_Handler
  45.     
  46.     Dim Arr() As Byte
  47.     Dim f As Integer
  48.     
  49.     f = FreeFile 'Get any available file number for use
  50.     
  51.     Open File For Binary Access Read As f
  52.         'Redimensionized array according to length of file
  53.         ReDim Arr(0 To LOF(f) - 1) As Byte
  54.         Get #f, , Arr() 'Get file contents
  55.     Close #f
  56.     
  57.     'Calculate CRC32 checksum
  58.     FileChecksum = Hex$(CalculateBytes(Arr))
  59.     
  60. Err_Handler:
  61. End Function
  62.  
  63. Function StringChecksum(Str As String) As String
  64. 'Returns the CRC32 checksum value of the specified string.
  65.     'Make sure the string has contents before execution to avoid errors
  66.     If Not Len(Str) = 0 Then
  67.         'Convert into an array of bytes
  68.         StringChecksum = Hex$(CalculateBytes(StrConv(Str, vbFromUnicode)))
  69.     End If
  70. End Function
  71.  
  72. 'Private Function
  73. Private Function CalculateBytes(Arr() As Byte) As Long
  74.     Dim CRC32 As Long
  75.     CRC32 = &HFFFFFFFF 'CRC32 must have this default value
  76.     
  77.     'Suppress error if array isn't dimensionized
  78.     On Local Error GoTo Err_Handler
  79.     
  80.     Dim i As Long
  81.     i = UBound(Arr) - LBound(Arr) + 1 'Precalculate size of array
  82.     
  83.     'Execute the precompiled assembler code to calculate and generate CRC32 checksum value
  84.     Call CallWindowProc(VarPtr(m_CRC32Asmbl(0)), VarPtr(CRC32), VarPtr(Arr(LBound(Arr))), VarPtr(m_CRC32Table(0)), i)
  85.     
  86. Err_Handler:
  87.     CalculateBytes = (Not CRC32) 'Return CRC32 value
  88. End Function
  89.  
  90. 'Class Procedures
  91. Private Sub Class_Initialize()
  92.     Dim i As Long
  93. '    Dim j As Long
  94.     
  95. '    Dim lCRC32 As Long
  96.     
  97. '    Const lXOR32 As Long = &HEDB88320
  98.     
  99. '    For i = 0 To 255
  100. '        lCRC32 = i
  101. '
  102. '        For j = 8 To 1 Step -1
  103. '            If (lCRC32 And 1) Then
  104. '                lCRC32 = ((lCRC32 And &HFFFFFFFE) \ 2&) And &H7FFFFFFF
  105. '                lCRC32 = lCRC32 Xor lxor32
  106. '            Else
  107. '                lCRC32 = ((lCRC32 And &HFFFFFFFE) \ 2&) And &H7FFFFFFF
  108. '            End If
  109. '        Next j
  110. '
  111. '        m_CRC32Table(i) = lCRC32
  112. '    Next i
  113.     
  114.     m_CRC32Table(0) = &H0
  115.     m_CRC32Table(1) = &H77073096
  116.     m_CRC32Table(2) = &HEE0E612C
  117.     m_CRC32Table(3) = &H990951BA
  118.     m_CRC32Table(4) = &H76DC419
  119.     m_CRC32Table(5) = &H706AF48F
  120.     m_CRC32Table(6) = &HE963A535
  121.     m_CRC32Table(7) = &H9E6495A3
  122.     m_CRC32Table(8) = &HEDB8832
  123.     m_CRC32Table(9) = &H79DCB8A4
  124.     m_CRC32Table(10) = &HE0D5E91E
  125.     m_CRC32Table(11) = &H97D2D988
  126.     m_CRC32Table(12) = &H9B64C2B
  127.     m_CRC32Table(13) = &H7EB17CBD
  128.     m_CRC32Table(14) = &HE7B82D07
  129.     m_CRC32Table(15) = &H90BF1D91
  130.     m_CRC32Table(16) = &H1DB71064
  131.     m_CRC32Table(17) = &H6AB020F2
  132.     m_CRC32Table(18) = &HF3B97148
  133.     m_CRC32Table(19) = &H84BE41DE
  134.     m_CRC32Table(20) = &H1ADAD47D
  135.     m_CRC32Table(21) = &H6DDDE4EB
  136.     m_CRC32Table(22) = &HF4D4B551
  137.     m_CRC32Table(23) = &H83D385C7
  138.     m_CRC32Table(24) = &H136C9856
  139.     m_CRC32Table(25) = &H646BA8C0
  140.     m_CRC32Table(26) = &HFD62F97A
  141.     m_CRC32Table(27) = &H8A65C9EC
  142.     m_CRC32Table(28) = &H14015C4F
  143.     m_CRC32Table(29) = &H63066CD9
  144.     m_CRC32Table(30) = &HFA0F3D63
  145.     m_CRC32Table(31) = &H8D080DF5
  146.     m_CRC32Table(32) = &H3B6E20C8
  147.     m_CRC32Table(33) = &H4C69105E
  148.     m_CRC32Table(34) = &HD56041E4
  149.     m_CRC32Table(35) = &HA2677172
  150.     m_CRC32Table(36) = &H3C03E4D1
  151.     m_CRC32Table(37) = &H4B04D447
  152.     m_CRC32Table(38) = &HD20D85FD
  153.     m_CRC32Table(39) = &HA50AB56B
  154.     m_CRC32Table(40) = &H35B5A8FA
  155.     m_CRC32Table(41) = &H42B2986C
  156.     m_CRC32Table(42) = &HDBBBC9D6
  157.     m_CRC32Table(43) = &HACBCF940
  158.     m_CRC32Table(44) = &H32D86CE3
  159.     m_CRC32Table(45) = &H45DF5C75
  160.     m_CRC32Table(46) = &HDCD60DCF
  161.     m_CRC32Table(47) = &HABD13D59
  162.     m_CRC32Table(48) = &H26D930AC
  163.     m_CRC32Table(49) = &H51DE003A
  164.     m_CRC32Table(50) = &HC8D75180
  165.     m_CRC32Table(51) = &HBFD06116
  166.     m_CRC32Table(52) = &H21B4F4B5
  167.     m_CRC32Table(53) = &H56B3C423
  168.     m_CRC32Table(54) = &HCFBA9599
  169.     m_CRC32Table(55) = &HB8BDA50F
  170.     m_CRC32Table(56) = &H2802B89E
  171.     m_CRC32Table(57) = &H5F058808
  172.     m_CRC32Table(58) = &HC60CD9B2
  173.     m_CRC32Table(59) = &HB10BE924
  174.     m_CRC32Table(60) = &H2F6F7C87
  175.     m_CRC32Table(61) = &H58684C11
  176.     m_CRC32Table(62) = &HC1611DAB
  177.     m_CRC32Table(63) = &HB6662D3D
  178.     m_CRC32Table(64) = &H76DC4190
  179.     m_CRC32Table(65) = &H1DB7106
  180.     m_CRC32Table(66) = &H98D220BC
  181.     m_CRC32Table(67) = &HEFD5102A
  182.     m_CRC32Table(68) = &H71B18589
  183.     m_CRC32Table(69) = &H6B6B51F
  184.     m_CRC32Table(70) = &H9FBFE4A5
  185.     m_CRC32Table(71) = &HE8B8D433
  186.     m_CRC32Table(72) = &H7807C9A2
  187.     m_CRC32Table(73) = &HF00F934
  188.     m_CRC32Table(74) = &H9609A88E
  189.     m_CRC32Table(75) = &HE10E9818
  190.     m_CRC32Table(76) = &H7F6A0DBB
  191.     m_CRC32Table(77) = &H86D3D2D
  192.     m_CRC32Table(78) = &H91646C97
  193.     m_CRC32Table(79) = &HE6635C01
  194.     m_CRC32Table(80) = &H6B6B51F4
  195.     m_CRC32Table(81) = &H1C6C6162
  196.     m_CRC32Table(82) = &H856530D8
  197.     m_CRC32Table(83) = &HF262004E
  198.     m_CRC32Table(84) = &H6C0695ED
  199.     m_CRC32Table(85) = &H1B01A57B
  200.     m_CRC32Table(86) = &H8208F4C1
  201.     m_CRC32Table(87) = &HF50FC457
  202.     m_CRC32Table(88) = &H65B0D9C6
  203.     m_CRC32Table(89) = &H12B7E950
  204.     m_CRC32Table(90) = &H8BBEB8EA
  205.     m_CRC32Table(91) = &HFCB9887C
  206.     m_CRC32Table(92) = &H62DD1DDF
  207.     m_CRC32Table(93) = &H15DA2D49
  208.     m_CRC32Table(94) = &H8CD37CF3
  209.     m_CRC32Table(95) = &HFBD44C65
  210.     m_CRC32Table(96) = &H4DB26158
  211.     m_CRC32Table(97) = &H3AB551CE
  212.     m_CRC32Table(98) = &HA3BC0074
  213.     m_CRC32Table(99) = &HD4BB30E2
  214.     m_CRC32Table(100) = &H4ADFA541
  215.     m_CRC32Table(101) = &H3DD895D7
  216.     m_CRC32Table(102) = &HA4D1C46D
  217.     m_CRC32Table(103) = &HD3D6F4FB
  218.     m_CRC32Table(104) = &H4369E96A
  219.     m_CRC32Table(105) = &H346ED9FC
  220.     m_CRC32Table(106) = &HAD678846
  221.     m_CRC32Table(107) = &HDA60B8D0
  222.     m_CRC32Table(108) = &H44042D73
  223.     m_CRC32Table(109) = &H33031DE5
  224.     m_CRC32Table(110) = &HAA0A4C5F
  225.     m_CRC32Table(111) = &HDD0D7CC9
  226.     m_CRC32Table(112) = &H5005713C
  227.     m_CRC32Table(113) = &H270241AA
  228.     m_CRC32Table(114) = &HBE0B1010
  229.     m_CRC32Table(115) = &HC90C2086
  230.     m_CRC32Table(116) = &H5768B525
  231.     m_CRC32Table(117) = &H206F85B3
  232.     m_CRC32Table(118) = &HB966D409
  233.     m_CRC32Table(119) = &HCE61E49F
  234.     m_CRC32Table(120) = &H5EDEF90E
  235.     m_CRC32Table(121) = &H29D9C998
  236.     m_CRC32Table(122) = &HB0D09822
  237.     m_CRC32Table(123) = &HC7D7A8B4
  238.     m_CRC32Table(124) = &H59B33D17
  239.     m_CRC32Table(125) = &H2EB40D81
  240.     m_CRC32Table(126) = &HB7BD5C3B
  241.     m_CRC32Table(127) = &HC0BA6CAD
  242.     m_CRC32Table(128) = &HEDB88320
  243.     m_CRC32Table(129) = &H9ABFB3B6
  244.     m_CRC32Table(130) = &H3B6E20C
  245.     m_CRC32Table(131) = &H74B1D29A
  246.     m_CRC32Table(132) = &HEAD54739
  247.     m_CRC32Table(133) = &H9DD277AF
  248.     m_CRC32Table(134) = &H4DB2615
  249.     m_CRC32Table(135) = &H73DC1683
  250.     m_CRC32Table(136) = &HE3630B12
  251.     m_CRC32Table(137) = &H94643B84
  252.     m_CRC32Table(138) = &HD6D6A3E
  253.     m_CRC32Table(139) = &H7A6A5AA8
  254.     m_CRC32Table(140) = &HE40ECF0B
  255.     m_CRC32Table(141) = &H9309FF9D
  256.     m_CRC32Table(142) = &HA00AE27
  257.     m_CRC32Table(143) = &H7D079EB1
  258.     m_CRC32Table(144) = &HF00F9344
  259.     m_CRC32Table(145) = &H8708A3D2
  260.     m_CRC32Table(146) = &H1E01F268
  261.     m_CRC32Table(147) = &H6906C2FE
  262.     m_CRC32Table(148) = &HF762575D
  263.     m_CRC32Table(149) = &H806567CB
  264.     m_CRC32Table(150) = &H196C3671
  265.     m_CRC32Table(151) = &H6E6B06E7
  266.     m_CRC32Table(152) = &HFED41B76
  267.     m_CRC32Table(153) = &H89D32BE0
  268.     m_CRC32Table(154) = &H10DA7A5A
  269.     m_CRC32Table(155) = &H67DD4ACC
  270.     m_CRC32Table(156) = &HF9B9DF6F
  271.     m_CRC32Table(157) = &H8EBEEFF9
  272.     m_CRC32Table(158) = &H17B7BE43
  273.     m_CRC32Table(159) = &H60B08ED5
  274.     m_CRC32Table(160) = &HD6D6A3E8
  275.     m_CRC32Table(161) = &HA1D1937E
  276.     m_CRC32Table(162) = &H38D8C2C4
  277.     m_CRC32Table(163) = &H4FDFF252
  278.     m_CRC32Table(164) = &HD1BB67F1
  279.     m_CRC32Table(165) = &HA6BC5767
  280.     m_CRC32Table(166) = &H3FB506DD
  281.     m_CRC32Table(167) = &H48B2364B
  282.     m_CRC32Table(168) = &HD80D2BDA
  283.     m_CRC32Table(169) = &HAF0A1B4C
  284.     m_CRC32Table(170) = &H36034AF6
  285.     m_CRC32Table(171) = &H41047A60
  286.     m_CRC32Table(172) = &HDF60EFC3
  287.     m_CRC32Table(173) = &HA867DF55
  288.     m_CRC32Table(174) = &H316E8EEF
  289.     m_CRC32Table(175) = &H4669BE79
  290.     m_CRC32Table(176) = &HCB61B38C
  291.     m_CRC32Table(177) = &HBC66831A
  292.     m_CRC32Table(178) = &H256FD2A0
  293.     m_CRC32Table(179) = &H5268E236
  294.     m_CRC32Table(180) = &HCC0C7795
  295.     m_CRC32Table(181) = &HBB0B4703
  296.     m_CRC32Table(182) = &H220216B9
  297.     m_CRC32Table(183) = &H5505262F
  298.     m_CRC32Table(184) = &HC5BA3BBE
  299.     m_CRC32Table(185) = &HB2BD0B28
  300.     m_CRC32Table(186) = &H2BB45A92
  301.     m_CRC32Table(187) = &H5CB36A04
  302.     m_CRC32Table(188) = &HC2D7FFA7
  303.     m_CRC32Table(189) = &HB5D0CF31
  304.     m_CRC32Table(190) = &H2CD99E8B
  305.     m_CRC32Table(191) = &H5BDEAE1D
  306.     m_CRC32Table(192) = &H9B64C2B0
  307.     m_CRC32Table(193) = &HEC63F226
  308.     m_CRC32Table(194) = &H756AA39C
  309.     m_CRC32Table(195) = &H26D930A
  310.     m_CRC32Table(196) = &H9C0906A9
  311.     m_CRC32Table(197) = &HEB0E363F
  312.     m_CRC32Table(198) = &H72076785
  313.     m_CRC32Table(199) = &H5005713
  314.     m_CRC32Table(200) = &H95BF4A82
  315.     m_CRC32Table(201) = &HE2B87A14
  316.     m_CRC32Table(202) = &H7BB12BAE
  317.     m_CRC32Table(203) = &HCB61B38
  318.     m_CRC32Table(204) = &H92D28E9B
  319.     m_CRC32Table(205) = &HE5D5BE0D
  320.     m_CRC32Table(206) = &H7CDCEFB7
  321.     m_CRC32Table(207) = &HBDBDF21
  322.     m_CRC32Table(208) = &H86D3D2D4
  323.     m_CRC32Table(209) = &HF1D4E242
  324.     m_CRC32Table(210) = &H68DDB3F8
  325.     m_CRC32Table(211) = &H1FDA836E
  326.     m_CRC32Table(212) = &H81BE16CD
  327.     m_CRC32Table(213) = &HF6B9265B
  328.     m_CRC32Table(214) = &H6FB077E1
  329.     m_CRC32Table(215) = &H18B74777
  330.     m_CRC32Table(216) = &H88085AE6
  331.     m_CRC32Table(217) = &HFF0F6A70
  332.     m_CRC32Table(218) = &H66063BCA
  333.     m_CRC32Table(219) = &H11010B5C
  334.     m_CRC32Table(220) = &H8F659EFF
  335.     m_CRC32Table(221) = &HF862AE69
  336.     m_CRC32Table(222) = &H616BFFD3
  337.     m_CRC32Table(223) = &H166CCF45
  338.     m_CRC32Table(224) = &HA00AE278
  339.     m_CRC32Table(225) = &HD70DD2EE
  340.     m_CRC32Table(226) = &H4E048354
  341.     m_CRC32Table(227) = &H3903B3C2
  342.     m_CRC32Table(228) = &HA7672661
  343.     m_CRC32Table(229) = &HD06016F7
  344.     m_CRC32Table(230) = &H4969474D
  345.     m_CRC32Table(231) = &H3E6E77DB
  346.     m_CRC32Table(232) = &HAED16A4A
  347.     m_CRC32Table(233) = &HD9D65ADC
  348.     m_CRC32Table(234) = &H40DF0B66
  349.     m_CRC32Table(235) = &H37D83BF0
  350.     m_CRC32Table(236) = &HA9BCAE53
  351.     m_CRC32Table(237) = &HDEBB9EC5
  352.     m_CRC32Table(238) = &H47B2CF7F
  353.     m_CRC32Table(239) = &H30B5FFE9
  354.     m_CRC32Table(240) = &HBDBDF21C
  355.     m_CRC32Table(241) = &HCABAC28A
  356.     m_CRC32Table(242) = &H53B39330
  357.     m_CRC32Table(243) = &H24B4A3A6
  358.     m_CRC32Table(244) = &HBAD03605
  359.     m_CRC32Table(245) = &HCDD70693
  360.     m_CRC32Table(246) = &H54DE5729
  361.     m_CRC32Table(247) = &H23D967BF
  362.     m_CRC32Table(248) = &HB3667A2E
  363.     m_CRC32Table(249) = &HC4614AB8
  364.     m_CRC32Table(250) = &H5D681B02
  365.     m_CRC32Table(251) = &H2A6F2B94
  366.     m_CRC32Table(252) = &HB40BBE37
  367.     m_CRC32Table(253) = &HC30C8EA1
  368.     m_CRC32Table(254) = &H5A05DF1B
  369.     m_CRC32Table(255) = &H2D02EF8D
  370.     
  371.     Const ASM As String = "5589E557565053518B45088B008B750C8B7D108B4D1431DB8A1E30C3C1E80833049F464975F28B4D088901595B585E5F89EC5DC21000"
  372.     
  373. '   Decoded ASM source from HIEW 6.86 (Hacker's View)
  374. '
  375. '   55          PUSH    BP
  376. '   89E5        MOV     BP,SP
  377. '   57          PUSH    DI
  378. '   56          PUSH    SI
  379. '   50          PUSH    AX
  380. '   53          PUSH    BX
  381. '   51          PUSH    CX
  382. '   8B4508      MOV     AX,DI[08]
  383. '   8B00        MOV     AX,BX[SI]
  384. '   8B750C      MOV     SI,DI[0C]
  385. '   8B7D10      MOV     DI,DI[10]
  386. '   8B4D14      MOV     CX,DI[14]
  387. '   31DB        XOR     BX,BX
  388. '   8A1E30C3    MOV     BL,0C330
  389. '   C1E808      SHR     AX,008    <-.
  390. '   3304        XOR     AX,[SI]     |
  391. '   9F          LAHF                |
  392. '   46          INC     SI          |
  393. '   49          DEC     CX          |
  394. '   75F2        JNE     000000018  -'
  395. '   8B4D08      MOV     CX,DI[08]
  396. '   8901        MOV     BX[DI],AX
  397. '   59          POP     CX
  398. '   5B          POP     BX
  399. '   58          POP     AX
  400. '   5E          POP     SI
  401. '   5F          POP     DI
  402. '   89EC        MOV     SP,BP
  403. '   5D          POP     BP
  404. '   C21000      RETN    00010
  405.     
  406.     ReDim m_CRC32Asmbl(0 To Len(ASM) \ 2 - 1) 'Initialize CRC32 precompiled assembly code
  407.     
  408.     For i = 1 To Len(ASM) Step 2
  409.         m_CRC32Asmbl(i \ 2) = Val("&H" & Mid$(ASM, i, 2))
  410.     Next i
  411. End Sub
  412.  
  413. 'Created by Noel A. Dacara | Copyright ⌐ 2003-2005 Davao City, Philippines
  414.  
  415.