Kontrolinė suma: apibrėžimas, skaičiavimo algoritmai ir taikymai
Kontrolinė suma yra skaičius, pridedamas prie duomenų kaip perteklinis tikrinimo elementas. Ji suskaičiuojama įvairiais metodais ir padeda aptikti klaidas, atsiradusias perduodant ar užrašant skaitmenis ar bitus. Paprasčiausioje formoje skaitmenys tiesiog sudedami; toks paprastas metodas aptinka kai kurias klaidas, bet ne visada — pavyzdžiui, jis negali patikimai aptikti, kai du skaitmenys sukeičiami vietomis. Geresni kontrolinės sumos apskaičiavimo būdai (algoritmai) yra Hammingo kodas, ciklinio perteklinio tikrinimo sistema arba modulinė aritmetika. Viena iš kontrolinių sumų paskirčių - patikrinti, ar teisingai įvesti sąskaitų numeriai.
Kaip skiriasi algoritmai
Algoritmai skiriasi pagal tai, ką jie sugeba aptikti ir ar tikrina klaidas ar jas taiso:
- Paprastas skaitmenų suma (mod N): greita ir paprasta, tačiau prastai aptinka skaitmenų sukeitimus.
- Moduliniai metodai (pvz., mod 10, mod 11, mod 97): populiarūs bankininkystėje ir identifikatoriuose — daugeliu atvejų aptinka pavienius klaidingus skaitmenis ir kai kuriuos sukeitimus.
- Luhn algoritmas: naudojamas kredito kortelių numeriams; gerai aptinka daugelį vieno skaitmens klaidų ir kai kuriuos gretimų skaitmenų sukeitimus.
- Hamming'o kodas: leidžia ne tik aptikti, bet ir ištaisyti atskiras klaidas (vieno bito klaidas) — taikomas atmintyje ir telekomunikacijose.
- Ciklinio perteklinio tikrinimo (CRC) algoritmai: skirti duomenų perdavimui — jie labai gerai aptinka vieno bito klaidas ir „burst“ klaidas priklausomai nuo naudojamo polinomo.
Pavyzdys: Portugalijos banko sąskaitos numeris
Portugalijos banko sąskaitų identifikatoriai yra geras kontrolinių sumų veikimo pavyzdys. Juose yra 21 skaitmuo. Pirmieji 19 skaitmenų nurodo banką, filialą ir sąskaitos numerį. Paskutiniai du skaitmenys yra moduline aritmetika pagrįstos kontrolinės sumos "mod 97" skaitmenys. Tipiškas Portugalijos banko sąskaitos numeris yra 0002.0123.12345678901.54. Skaičiai turi šias reikšmes:
- Skaičiai "0002" reiškia banką.
- Skaičiai "0123" reiškia banko filialą.
- Skaičiai "12345678901" reiškia sąskaitos numerį.
- Skaičiai "54" reiškia kontrolinę sumą.
Jei 000201231234567890154 (banko sąskaitos numeris be taškų) padalijamas iš 97, gaunama 207458809978249 likutis 1. Kadangi likutis yra "1", banko sąskaitos identifikatorius tikriausiai yra teisingas. Jei skaičių užrašęs asmuo praleido skaitmenį, sukeitė du skaitmenis vietomis arba neteisingai užrašė skaitmenį, likutis nebūtų "1". Tokiu atveju kompiuteris turėtų aptikti klaidą ir pateikti klaidos pranešimą.
Ką kontrolinės sumos aptinka ir ko ne
- Kontrolinės sumos dažniausiai aptinka pavienes klaidas (vieną neteisingą skaitmenį) ir daugeliu atvejų – kai kuriuos skaitmenų sukeitimus.
- Ne visi algoritmai aptinka visus sukeitimus: paprasta suma neaptinka daugelio dviejų skaitmenų sukeitimų, o specializuoti metodai (pvz., Luhn arba tam tikros mod operacijos) aptinka gerokai daugiau klaidų.
- CRC ir Hamming'o tipų metodai gali aptikti arba net ištaisyti klaidas bitų lygyje, todėl jie plačiai naudojami duomenų perdavime ir atmintyje.
- Kontrolinė suma nėra kriptografinė priemonė: ji nebepaslaugos nuo tyčinių duomenų klastojimų ar neteisėtų pakeitimų — tam naudojami kriptografiniai parašai arba MAC.
Praktiniai taikymai
- Sąskaitų ir identifikacinių numerių patikra (bankai, IBAN, vietinės sąskaitos).
- Kredito kortelių numerių tikrinimas (Luhn algoritmas).
- Programinės įrangos arba aparatūros serijiniai numeriai ir registracijos kodai.
- Duomenų perdavimo protokolai ir saugyklos (CRC, Hamming) — aptinka ir (kai kuriais atvejais) taiso klaidas.
Apibendrinant: kontrolinė suma yra paprasta, bet labai naudinga priemonė klaidų aptikimui. Renkantis konkrečią kontrolinės sumos schemą svarbu įvertinti, kokių klaidų tikimasi (atsitiktinės klaidos, bitų srautų klaidos ar tyčiniai pakeitimai) ir kiek sudėtingumo bei apsaugos reikia jūsų sistemai.
Kita vieta, kur naudojamos kontrolinės sumos, yra kompiuterių programinės įrangos serijiniai numeriai.


Šiuolaikinis EAN brūkšninis kodas: Žaliai pažymėtos dalys vadinamos tarpinėmis: Jie atskiria skaičių grupes. Kiekvieną skaičių koduoja 7 bitai, kaip parodyta paveikslėlyje. Pirmieji 11 skaitmenų nurodo gaminio numerį. Paskutinis skaitmuo, šiuo atveju skaičius "2", yra kontrolinė suma. Kontrolinė suma sudedama taip, kad lyginių pozicijų ir nelyginių pozicijų, padaugintų iš trijų, modulo 10 suma būtų lygi 0.
Klausimai ir atsakymai
K: Kas yra kontrolinė suma?
A.: Kontrolinė suma - tai skaičius, naudojamas kaip perteklinės informacijos patikrinimas. Ji padeda patikrinti, ar užrašant skaičių nebuvo padaryta klaidų.
K: Kaip apskaičiuojamos kontrolinės sumos?
A.: Kontrolinės sumos gali būti apskaičiuojamos įvairiais būdais, tačiau paprasčiausia forma skaitmenys tiesiog sudedami. Tačiau taip negalima nustatyti klaidų, padarytų sukeičiant skaitmenis vietomis.
K: Koks yra kontrolinių sumų veikimo pavyzdys?
A: Portugalijos banko sąskaitų identifikatoriai yra geras kontrolinių sumų veikimo pavyzdys. Juose yra 21 skaitmuo, o paskutiniai du skaitmenys yra moduline aritmetika pagrįsta "mod 97" kontrolinė suma.
K: Kaip tai padeda aptikti klaidas?
A: Jei kuris nors skaitmuo praleistas, sukeistas vietomis arba neteisingai užrašytas, likutis nebus "1". Tokiu atveju kompiuteris turėtų aptikti klaidą ir pateikti klaidos pranešimą.
K: Kur dar naudojamos kontrolinės sumos?
A: Kontrolinės sumos taip pat naudojamos kompiuterių programinės įrangos serijiniams numeriams.
K: Kas atsitinka, jei kontrolinė suma aptinka klaidą?
A: Jei kontrolinė suma aptinka klaidą, kompiuteris turėtų ją aptikti ir pateikti klaidos pranešimą.