[Cramel] Algoritmo CRC32

Iniciado por Yuki, Junio 10, 2017, 10:28:18 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Junio 10, 2017, 10:28:18 PM Ultima modificación: Junio 13, 2017, 12:27:55 AM por Yuki
El algoritmo CRC o código de redundancia cíclica es un algoritmo que permite comprobar la fiabilidad y la no alteración de datos, en software se utiliza para comprobar si existe corrupción de datos.

Les dejo acá una implementación en Cramel.

Código: php
Importar "Cramel.cml"

Clase CRC32,TLookup[256]:Entero

    Constructor:Inicializar

    Proc Inicializar
        TLookup[0] = &0
        TLookup[1] = &77073096
        TLookup[2] = &EE0E612C
        TLookup[3] = &990951BA
        TLookup[4] = &76DC419
        TLookup[5] = &706AF48F
        TLookup[6] = &E963A535
        TLookup[7] = &9E6495A3
        TLookup[8] = &EDB8832
        TLookup[9] = &79DCB8A4
        TLookup[10] = &E0D5E91E
        TLookup[11] = &97D2D988
        TLookup[12] = &9B64C2B
        TLookup[13] = &7EB17CBD
        TLookup[14] = &E7B82D07
        TLookup[15] = &90BF1D91
        TLookup[16] = &1DB71064
        TLookup[17] = &6AB020F2
        TLookup[18] = &F3B97148
        TLookup[19] = &84BE41DE
        TLookup[20] = &1ADAD47D
        TLookup[21] = &6DDDE4EB
        TLookup[22] = &F4D4B551
        TLookup[23] = &83D385C7
        TLookup[24] = &136C9856
        TLookup[25] = &646BA8C0
        TLookup[26] = &FD62F97A
        TLookup[27] = &8A65C9EC
        TLookup[28] = &14015C4F
        TLookup[29] = &63066CD9
        TLookup[30] = &FA0F3D63
        TLookup[31] = &8D080DF5
        TLookup[32] = &3B6E20C8
        TLookup[33] = &4C69105E
        TLookup[34] = &D56041E4
        TLookup[35] = &A2677172
        TLookup[36] = &3C03E4D1
        TLookup[37] = &4B04D447
        TLookup[38] = &D20D85FD
        TLookup[39] = &A50AB56B
        TLookup[40] = &35B5A8FA
        TLookup[41] = &42B2986C
        TLookup[42] = &DBBBC9D6
        TLookup[43] = &ACBCF940
        TLookup[44] = &32D86CE3
        TLookup[45] = &45DF5C75
        TLookup[46] = &DCD60DCF
        TLookup[47] = &ABD13D59
        TLookup[48] = &26D930AC
        TLookup[49] = &51DE003A
        TLookup[50] = &C8D75180
        TLookup[51] = &BFD06116
        TLookup[52] = &21B4F4B5
        TLookup[53] = &56B3C423
        TLookup[54] = &CFBA9599
        TLookup[55] = &B8BDA50F
        TLookup[56] = &2802B89E
        TLookup[57] = &5F058808
        TLookup[58] = &C60CD9B2
        TLookup[59] = &B10BE924
        TLookup[60] = &2F6F7C87
        TLookup[61] = &58684C11
        TLookup[62] = &C1611DAB
        TLookup[63] = &B6662D3D
        TLookup[64] = &76DC4190
        TLookup[65] = &1DB7106
        TLookup[66] = &98D220BC
        TLookup[67] = &EFD5102A
        TLookup[68] = &71B18589
        TLookup[69] = &6B6B51F
        TLookup[70] = &9FBFE4A5
        TLookup[71] = &E8B8D433
        TLookup[72] = &7807C9A2
        TLookup[73] = &F00F934
        TLookup[74] = &9609A88E
        TLookup[75] = &E10E9818
        TLookup[76] = &7F6A0DBB
        TLookup[77] = &86D3D2D
        TLookup[78] = &91646C97
        TLookup[79] = &E6635C01
        TLookup[80] = &6B6B51F4
        TLookup[81] = &1C6C6162
        TLookup[82] = &856530D8
        TLookup[83] = &F262004E
        TLookup[84] = &6C0695ED
        TLookup[85] = &1B01A57B
        TLookup[86] = &8208F4C1
        TLookup[87] = &F50FC457
        TLookup[88] = &65B0D9C6
        TLookup[89] = &12B7E950
        TLookup[90] = &8BBEB8EA
        TLookup[91] = &FCB9887C
        TLookup[92] = &62DD1DDF
        TLookup[93] = &15DA2D49
        TLookup[94] = &8CD37CF3
        TLookup[95] = &FBD44C65
        TLookup[96] = &4DB26158
        TLookup[97] = &3AB551CE
        TLookup[98] = &A3BC0074
        TLookup[99] = &D4BB30E2
        TLookup[100] = &4ADFA541
        TLookup[101] = &3DD895D7
        TLookup[102] = &A4D1C46D
        TLookup[103] = &D3D6F4FB
        TLookup[104] = &4369E96A
        TLookup[105] = &346ED9FC
        TLookup[106] = &AD678846
        TLookup[107] = &DA60B8D0
        TLookup[108] = &44042D73
        TLookup[109] = &33031DE5
        TLookup[110] = &AA0A4C5F
        TLookup[111] = &DD0D7CC9
        TLookup[112] = &5005713C
        TLookup[113] = &270241AA
        TLookup[114] = &BE0B1010
        TLookup[115] = &C90C2086
        TLookup[116] = &5768B525
        TLookup[117] = &206F85B3
        TLookup[118] = &B966D409
        TLookup[119] = &CE61E49F
        TLookup[120] = &5EDEF90E
        TLookup[121] = &29D9C998
        TLookup[122] = &B0D09822
        TLookup[123] = &C7D7A8B4
        TLookup[124] = &59B33D17
        TLookup[125] = &2EB40D81
        TLookup[126] = &B7BD5C3B
        TLookup[127] = &C0BA6CAD
        TLookup[128] = &EDB88320
        TLookup[129] = &9ABFB3B6
        TLookup[130] = &3B6E20C
        TLookup[131] = &74B1D29A
        TLookup[132] = &EAD54739
        TLookup[133] = &9DD277AF
        TLookup[134] = &4DB2615
        TLookup[135] = &73DC1683
        TLookup[136] = &E3630B12
        TLookup[137] = &94643B84
        TLookup[138] = &D6D6A3E
        TLookup[139] = &7A6A5AA8
        TLookup[140] = &E40ECF0B
        TLookup[141] = &9309FF9D
        TLookup[142] = &A00AE27
        TLookup[143] = &7D079EB1
        TLookup[144] = &F00F9344
        TLookup[145] = &8708A3D2
        TLookup[146] = &1E01F268
        TLookup[147] = &6906C2FE
        TLookup[148] = &F762575D
        TLookup[149] = &806567CB
        TLookup[150] = &196C3671
        TLookup[151] = &6E6B06E7
        TLookup[152] = &FED41B76
        TLookup[153] = &89D32BE0
        TLookup[154] = &10DA7A5A
        TLookup[155] = &67DD4ACC
        TLookup[156] = &F9B9DF6F
        TLookup[157] = &8EBEEFF9
        TLookup[158] = &17B7BE43
        TLookup[159] = &60B08ED5
        TLookup[160] = &D6D6A3E8
        TLookup[161] = &A1D1937E
        TLookup[162] = &38D8C2C4
        TLookup[163] = &4FDFF252
        TLookup[164] = &D1BB67F1
        TLookup[165] = &A6BC5767
        TLookup[166] = &3FB506DD
        TLookup[167] = &48B2364B
        TLookup[168] = &D80D2BDA
        TLookup[169] = &AF0A1B4C
        TLookup[170] = &36034AF6
        TLookup[171] = &41047A60
        TLookup[172] = &DF60EFC3
        TLookup[173] = &A867DF55
        TLookup[174] = &316E8EEF
        TLookup[175] = &4669BE79
        TLookup[176] = &CB61B38C
        TLookup[177] = &BC66831A
        TLookup[178] = &256FD2A0
        TLookup[179] = &5268E236
        TLookup[180] = &CC0C7795
        TLookup[181] = &BB0B4703
        TLookup[182] = &220216B9
        TLookup[183] = &5505262F
        TLookup[184] = &C5BA3BBE
        TLookup[185] = &B2BD0B28
        TLookup[186] = &2BB45A92
        TLookup[187] = &5CB36A04
        TLookup[188] = &C2D7FFA7
        TLookup[189] = &B5D0CF31
        TLookup[190] = &2CD99E8B
        TLookup[191] = &5BDEAE1D
        TLookup[192] = &9B64C2B0
        TLookup[193] = &EC63F226
        TLookup[194] = &756AA39C
        TLookup[195] = &26D930A
        TLookup[196] = &9C0906A9
        TLookup[197] = &EB0E363F
        TLookup[198] = &72076785
        TLookup[199] = &5005713
        TLookup[200] = &95BF4A82
        TLookup[201] = &E2B87A14
        TLookup[202] = &7BB12BAE
        TLookup[203] = &CB61B38
        TLookup[204] = &92D28E9B
        TLookup[205] = &E5D5BE0D
        TLookup[206] = &7CDCEFB7
        TLookup[207] = &BDBDF21
        TLookup[208] = &86D3D2D4
        TLookup[209] = &F1D4E242
        TLookup[210] = &68DDB3F8
        TLookup[211] = &1FDA836E
        TLookup[212] = &81BE16CD
        TLookup[213] = &F6B9265B
        TLookup[214] = &6FB077E1
        TLookup[215] = &18B74777
        TLookup[216] = &88085AE6
        TLookup[217] = &FF0F6A70
        TLookup[218] = &66063BCA
        TLookup[219] = &11010B5C
        TLookup[220] = &8F659EFF
        TLookup[221] = &F862AE69
        TLookup[222] = &616BFFD3
        TLookup[223] = &166CCF45
        TLookup[224] = &A00AE278
        TLookup[225] = &D70DD2EE
        TLookup[226] = &4E048354
        TLookup[227] = &3903B3C2
        TLookup[228] = &A7672661
        TLookup[229] = &D06016F7
        TLookup[230] = &4969474D
        TLookup[231] = &3E6E77DB
        TLookup[232] = &AED16A4A
        TLookup[233] = &D9D65ADC
        TLookup[234] = &40DF0B66
        TLookup[235] = &37D83BF0
        TLookup[236] = &A9BCAE53
        TLookup[237] = &DEBB9EC5
        TLookup[238] = &47B2CF7F
        TLookup[239] = &30B5FFE9
        TLookup[240] = &BDBDF21C
        TLookup[241] = &CABAC28A
        TLookup[242] = &53B39330
        TLookup[243] = &24B4A3A6
        TLookup[244] = &BAD03605
        TLookup[245] = &CDD70693
        TLookup[246] = &54DE5729
        TLookup[247] = &23D967BF
        TLookup[248] = &B3667A2E
        TLookup[249] = &C4614AB8
        TLookup[250] = &5D681B02
        TLookup[251] = &2A6F2B94
        TLookup[252] = &B40BBE37
        TLookup[253] = &C30C8EA1
        TLookup[254] = &5A05DF1B
        TLookup[255] = &2D02EF8D
    FinProc

    Proc CalcularCRC32(Referencia Fuente:Cadena):Cadena
        Var CRC,i,Temp1:Entero,bArray[]:Byte
        bArray = CadAMatByte(Fuente)
        CRC = -1
        Contar i a &bArray-1
            Si CRC < 0 Entonces
                Temp1 = (((CRC And &7FFFFFFF) \ 256) Or &800000) And &FFFFFF
            SiNo
                Temp1 = (CRC \ 256) And &FFFFFF
            FinSi
            CRC = Temp1 Xor (TLookup[(CRC Xor bArray[i]) And &FF])
        Seguir
        CRC = CRC Xor &FFFFFFFF
        Resultado = EntCad(CRC,16)
    FinProc

FinClase

Var Objeto:CRC32

Crear Objeto

    Mensaje(Objeto.CalcularCRC32("Hola Mundo"))
   
Destruir Objeto