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.
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