Kontrolsum: definition, beregning og eksempler (CRC, Hamming, mod 97)
Lær alt om kontrolsum: definition, beregning og eksempler (CRC, Hamming, mod 97). Fejldetektion for kontonumre, serier og data — klare forklaringer og praktiske eksempler.
En kontrolsum er et tal beregnet ud fra et andet datasæt (for eksempel et serienummer eller et kontonummer) og bruges som en simpel form for redundanskontrol. Formålet er at opdage (og i nogle tilfælde rette) fejl, som kan opstå ved indtastning, transmission eller lagring. Der findes mange forskellige måder at beregne en kontrolsum på; valget afhænger af, hvilke typer fejl man ønsker at fange.
Grundlæggende idé og enkle metoder
I sin enkleste form lægges cifrene i et tal blot sammen og resultatet anvendes som kontrol. Denne metode er let at beregne og forstå, men den er svag over for visse fejltyper: den opdager typisk enkeltfejl (et ciffer ændret), men den kan ikke afsløre, hvis to cifre er blevet byttet om (transpositionsfejl), og flere fejlværdier kan ophæve hinanden.
Generelt gælder:
- En simpel ciffer-sum er let, men har lav fejldetekteringsstyrke.
- Metoder med vægtede positioner (f.eks. Luhn-algoritmen) fanger også mange transpositionsfejl.
- Stærkere metoder (Hamming, CRC, modulær aritmetik) giver væsentligt bedre garanti for at opdage fejl.
Eksempler på stærkere algoritmer
- Hamming-kode: En lineær kode, der indsætter kontrolbits på bestemte positioner (typisk ved indeks, der er potenser af 2). Hamming-koder kan normalt rette enkeltbitfejl og detektere dobbeltbitfejl i den blok, de beskytter.
- Cyklisk redundanskontrol (CRC): Beregnes ved at fortolke datapakken som et polynomium over GF(2) og dividere med et fast polynomium; resten bruges som checksum. CRC'er opdager især sammenhængende fejl (burst errors) effektivt og anvendes i netværk og lagringsmedier.
- Modulær aritmetik (fx "mod 97"): Her beregnes resten ved division med et bestemt modulus. Denne metode bruges ofte til kontrolcifre i bankkontonumre og andre identifikatorer, fordi den fanger mange almindelige tastefejl og transpositioner, især når den kombineres med en passende konstruktion.
- Algoritmer til checksums kan variere fra simple summer til kryptografiske hashes (sidstnævnte bruges ikke som almindelig checksum, men som sikre integritetskontroller).
Praktisk eksempel: portugisiske bankkonti (mod 97)
Et konkret eksempel på modulær-kontrol er portugisiske bankkonto-id'er. De består af 21 cifre. De første 19 cifre identificerer banken, filialen og kontonummeret; de sidste to cifre er kontrolcifre beregnet med en "mod 97"-regel (modulær aritmetik). Et typisk portugisisk kontonummer kan se sådan ud: 0002.0123.12345678901.54. Cifrene betyder:
- Cifrene "0002" repræsenterer banken.
- Cifrene "0123" repræsenterer bankens filial.
- Cifrene "12345678901" repræsenterer kontonummeret.
- Cifrene "54" repræsenterer kontrolsummen.
Når man tjekker nummeret, fjerner man punktummerne og divideres det samlede tal (i eksemplet: 00020123121234567890154) med 97. Hvis divisionen giver rest 1, betragtes nummeret som gyldigt efter den valgte regel. Hvis resten ikke er 1, er der sandsynligvis sket en fejl — for eksempel at et ciffer er glemt, to cifre er byttet om eller et ciffer er indtastet forkert — og systemet kan så vise en fejlmeddelelse.
Hvor anvendes checksums?
Checksums bruges bredt, fx til:
- Kontrol af bankkontonumre og andre identifikatorer (som i eksemplet ovenfor).
- Kontrol af serienumre og produktnøgler.
- Integritetskontrol ved dataoverførsel (CRC i netværk, arkiver og filformater).
- Opdagelse af fejl ved lagring og backup.
Begrænsninger og valg af metode
Det er vigtigt at vælge den rigtige type checksum til formålet:
- En simpel ciffer-sum er tilstrækkelig til meget grundlæggende kontrol, men opdager ikke mange fejltyper.
- Hamming-koder er velegnede, hvis man ønsker automatisk korrektion af enkelte bitfejl i en blok af data.
- CRC'er er effektive mod burst-fejl og almindeligt anvendt i kommunikation og lagring.
- Modulære kontrolcifre (fx mod 97) er gode til at fange mange tastefejl i numeriske identifikatorer.
- Checksums beskytter ikke mod ondsindet manipulation; til sikker integritetskontrol eller autentificering bør man bruge kryptografiske metoder (MACs, digitale signaturer eller hashes med nøgle).
Opsummeret: en kontrolsum er et enkelt og nyttigt redskab til at opdage utilsigtede fejl, men styrken afhænger af den metode, man vælger. Til menneskelig indtastning af numre er vægtede kontrolcifre eller modulære checks populære; til datatransmission og lagring anvendes ofte CRC'er eller lignende teknikker.

En moderne EAN-stregkode: De grønne dele kaldes afstandsstykker: De adskiller talgrupperne. Hvert nummer er kodet med 7 bits, som vist. De første 11 cifre indeholder produktnummeret. Det sidste ciffer, i dette tilfælde tallet "2", er kontrolsummen. Kontrolsummen lægges sammen, således at summen af de lige positioner og summen af de ulige positioner multipliceret med tre, modulo 10, er 0.
Spørgsmål og svar
Spørgsmål: Hvad er en checksum?
A: En checksum er et tal, der bruges som redundanskontrol. Det tjener til at kontrollere, at der ikke er begået fejl, da tallet blev skrevet ned.
Q: Hvordan beregnes checksummen?
A: Kontrolsummer kan beregnes på forskellige måder, men i sin enkleste form lægges cifrene simpelthen sammen. Dette kan dog ikke afsløre fejl ved at bytte rundt på cifrene.
Spørgsmål: Hvad er et eksempel på, hvordan checksummene fungerer?
A: Portugisiske bankkontoidentifikatorer er et godt eksempel på, hvordan kontrolsummer fungerer. De har 21 cifre, og de sidste to cifre repræsenterer "mod 97"-kontrolsummen baseret på modulær aritmetik.
Spørgsmål: Hvordan hjælper det med at opdage fejl?
Svar: Hvis et ciffer er glemt, byttet eller skrevet forkert, vil resten ikke være "1". I dette tilfælde bør computeren opdage en fejl og give en fejlmeddelelse.
Spørgsmål: Hvor bruges kontrolsummer ellers?
A: Kontrolsummer anvendes også til serienumre for computersoftware.
Spørgsmål: Hvad sker der, hvis der er en fejl, der er opdaget af en checksumme?
A: Hvis der er en fejl, der er registreret af en checksumme, skal computeren registrere den og give en fejlmeddelelse.
Søge