Op dinsdag 26 maart 2002 14:42 schreef mvdejong het volgende:
Er is niet een enkele manier.
De methode van Beus is een pariteits-bit. Daarmee kun je uit 8 bits detecteren of er 1 (of 3, 5 of 7) "omgevallen" zijn, terwijl 2, 4 of 6 missers niet worden gezien.
Bij geheugen zie je al ECC-geheugen, dan worden 3 bits gebruikt, dan is te detecteren of er 1 of 2 bits zijn omgevallen, en in het geval van 1 is het zelfs bekend welke, en dan te herstellen.
Een checksum over langere stukken (zoals een netwerk-pakketje) wordt gedaan door met bepaalde formules de opeenvolgende bytes in een checksum te verwerken, met optellingen, vermenigvuldigen en machtsverheffen. Meestal gebeurt dit met een CRC-formule (cyclic redundancy check), maar er zijn vele soorten algoritmen voor. Het voordeel hiervan is ook dat het eindresultaat bijv. ook maar op niet meer dan 1,2 of 4 bytes uitkomt (dat houdt dat natuurlijk wel weer verlies van informatie in).
De simpele optelling zoals jij voorstelt is mogelijk, en wordt ook wel gebruikt, maar komt er zelfs niet achter als twee opeenvolgende bytes worden verwisseld. Ook is het nadeel dat het resultaat bij langere berichten nogal groot wordt (daar zou je dan een modulo-operatie op kunnen loslaten).
Ik ga hier gewoon nog even aan toevoegen dat de manier om een CRC-16 of CRC-32 checksum te bereken gewoon gedaan wordt met schuifregisters en XOR units of door deze bewerkingen in software die dan de overkomste hardware van de CPU daarvoor inschakelen.
Vermenigvuldingen en delingen (behalve door 2) worden niet gebruikt omdat die trager zijn.
*2 en /2 gaat enorm snel omdat dat gewoon een shift operatie is.
Er is naast gewone pariteit ook nog hamming code (wat ook een soort pariteitcheck is) maar die meer bitcorrectie biedt.
Maar zoals gezegd door mvdejong checksums van grote hoeveelheden data meestal CRC-32 of bv MD5.