Kontrolesom

duimnael|250px|Die UNIX-hulpprogram `cksum` kan gebruik word om 'n kontrolesom te genereer. Hierdie diagram toon hoe 'n klein verskil in 'n invoerstring groot verskille in die kontrolesom kan genereer.

'n **Kontrolesom** is 'n vorm van oortolligheidstoets, 'n eenvoudige manier om die integriteit van data te verseker deur foutsporing te doen op data wat versend is (telekommunikasie) of op data wat gestoor is (Rekenaarberging). Dit word gedoen deur die basiese onderdele van 'n boodskap bymekaar te tel, tipies die aangeskakelde bisse, en die stoor van die resulterende waarde. Later kan enigeen dieselfde bewerking op die data uitvoer en die resultaat met die kontrolesom vergelyk en indien die resultate ooreenstem kan daar afgelei word dat daar geen korrupsie van die data plaasgevind het nie.

## Binêre kontrolsomme
Die eenvoudigste vorm van kontrolesom is waar die aangeskakelde bisse (die 1ne) in die data bymekaargetel word. Met hierdie soort kontrolesom kan die aantal of soorte foute nie bespeur word nie. So 'n kontrolesom word veral nie deur die volgende foute verander nie:

* die herrangskikking van die bisse in die boodskap
* die invoeging of uitvee van nulwaarde bisse
* veelvuldige foute wat optel tot nul

'n Voorbeeld van 'n eenvoudige kontrolesom is:

Gegewe 4 grepe data : 25h, 62h, 3Fh, 52h
:Stap 1: Die bymekaartel van al die grepe gee 118h.
:Stap 2: Laat die halwe greep wat oorgedra word weg om 18h te lewer.
:Stap 3: Verkry die komplement van twee van die 18h wat E8h lewer. Dit is dan die kontrolesomgreep.
Om die Kontrolesomgreep te toets voeg dit eenvoudig by die oorspronklike groep grepe. Dit behoort die getal 200h te lewer. Laat weer die halwe greep wat oorgedra is weg en dit sal 00h lewer. Aangesien dit 00h is beteken dit dat die grepe waarskynlik onveranderd is.

Meer verfynde soorte oortolligheidstoetse bestaan, insluitend Fletcher se kontrolesom, Adler-32 en sikliese oortolligheidstoetse wat ontwerp is om die gebreke aan te spreek deur nie net die waarde van elke greep in berekening te bring nie, maar ook die posisie daarvan. Die nadeel verbonde aan die vermoë om meer soorte foute te kan opspoor is die gevolglike verhoogde kompleksiteit verbonde aan die berekening van die kontrolesom.

Hierdie soorte oortolligheidstoetse is nuttig in die opspoor van veranderings in data wat per abuis plaasvind soos tydens die korrupsie van gestoorde data of foute tydens die oordrag van 'n kommunikasiesein. Hulle beskerm egter nie teen die kwaadwillige verandering van data nie aangesien hulle eenvoudige wiskundige struktuur dit maklik maak om hulle te flous. Om hierdie vlak van data-integriteit te verseker word die gebruik van 'n kriptografiese hashfunksie, soos SHA-256, benodig. In Unix is daar 'n hulpmiddel genaamd "cksum" wat beide 'n 32 bis CRC (sikliese oortolligheidstoets) en 'n greeptelling vir enige toevoerlêer kan lewer.

## Desimale kontrolsomme 
Kontrolsomme word dikwels gebruik saam met desimale getalle - byvoorbeeld om te verseker dat die bankrekeningnommers behoorlik oorgeskryf is.

### Luhn-algoritme (kredietkaarte ens) 
Die Luhn-algoritme word gebruik om reeksnommers in baie industrieë teen toevallige transkripsiefoute, onder andere die Suid-Afrikaanse identiteitsnommer, te verifieer. Die meeste kredietkaarte gebuik ook hierdie algoritme. Die algoritme is:
:1. Begin aan die regterkant van die nommer, word elke eweredige syfer verdubbel. As die waarde daarvan groter is as 9, word die twee syfers bymekaar getel.
:2. Hierdie waardes word by die onewe genommerde syfers gevoeg.
:3. As die totaal met 10 deelbaar is, is die getal waarskynlik korrek getranskribeer. As die totaal nie met 10 verdeelbaar is nie, is daar 'n fout.

Aangesien the aantal 80 deur 10 deelbaar is, is die nommer waarskynlik korrek getranskribeer. Een van die swakhede van die Luhn-algoritme is dat die transposisies 09 ↔ 90, 22 ↔ 55, 33 ↔ 66 of 44 ↔ 77 sal nie opgespoor word nie.

### ISBN in die boekhandel 
Sedert 1970 kan 'n ISBN (*International Standard Book Number*) aan 'n boek vir identifikasiedoeleindes toegeken word. Tot 2007 was die ISBN tien syfers lank; sedertdien is dit 13 syfers lank. In albei gevalle is die finale syfer 'n kontrolesom - die ander syfers bevat 'n reeksnommers, die nommer van die boek se uitgewer en 'n nommer wat die land van herkoms aandui.  Die twee formate het verskillende reëls om die kontrolesom te bereken.

#### 10 syfer ISBN kontrolsom
Om te verifieer dat die kontrolesom vir 'n 10-syfer-ISBN geldig is, is elke syfer met sy posisie in die string vermenigvuldig met die syfer aan die regterkant in posisie een. Hierdie produkte word dan met mekaar bygevoeg en as die resultaat met 11 deelbaar is, is die nommer moontlik 'n geldige ISBN. In sommige gevalle is dit nodig om 'n kontrolesom met 'n waarde van 10 te hê om hierdie resultaat te verseker. In sulke gevalle is die finale syfer 'n 'X'.  Dit kan wiskundig uitgedruk word as:
:\sum_{i = 1}^{10} ix_i = 0\ (\mathrm{mod}\ 11)

Aangesien dat 110 deur 11 gedeel kan word sonder restant, is dit blykbaar dat hierdie ISBN geldig is.

#### 13 syfer kontrolsom
Om 'n ISBN van 13 syfers te verifieer, is elk van die ewe genommerde syfers met 3 vermenigvuldig. Hierdie produkte word bymekaar gevoeg en dan by die onewe-getalle syfers ook met die resultaat gevoeg. As die resultaat met 10 sonder 'n restant deel kan word, is die nommer waarskynlik 'n geldige ISBN.

### Modulo-97 in die bankbedryf
In sommige lande is 'n modulo-97 kontrolsom vir bankrekeningnommers gebruik - die getal 97 is gekies omdat dit die grootste twee-syfer-priemgetal is.

Voordat hulle die IBAN gebruik het, sluit hierdie aantal lande onder andere België, Frankryk en Portugal in. Wanneer 'n mens geld wil stuur na 'n ander persoon se bankrekening, moet hulle 'n enkele bankrekeningsyfer aangee wat 'n samesmelting is van die banktaknommer, die bankrekeningnommer en 'n mod-97 kontrolesom. Die kontrolesom sorg dat wanneer die hele getal deur 97 gedeel word, die restant altyd 1 is. As die gebruiker 'n enkele fout gemaak het terwyl hy die nommer getranskribeer het, sal die mod 97 kontrolesom altyd 'n fout opspoor. In die meeste gevalle sal dit ook twee foute opspoor.
 
Stel voor dat die banktaknommer 123 is, dat die rekeningnommer 987 is, dan sal die bankrekeningsyfer 12398735 wees. Die nommer "35" is gekies omdat 
:12398735 / 97 = 127827 \mbox{ restant } 1

of liewers 
:mod ( 12398735 , 97 ) = 1.

Aangesien die restant "1" is, is hierdie bankrekeninggetal geldig.

Die kontrolesomalgoritme wat vir die IBAN gebruik word, is 'n aanpassing van hierdie konsep.

## Verwysings 
## Sien ook 
* Kontrolesyfer
* Hamming kode
* Lys van kontrolesom algoritmes
* Luhn algoritme
* Pariteitsbis