IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Používanie modula v kľúčových údajoch v dnešnej dobe

V praxi často narazíme na rôzne moduly, ktoré majú zvyšovať bezpečnosť používaných údajov. Čo to vlastne je, a na čo to má naozaj slúžiť? Princíp modula je jednoduchý. Všeobecne spočíva v tom, že pre nejaký "kľúčový údaj" v znakovej podobe, ktorý slúži na identifikáciu nejakého reálneho objektu, je stanovený algoritmus na výpočet sumy z jednotlivých údajov. Tá potom musí byť u korektného údaje bezozbytku deliteľná zodpovedajúcim číslom.

Všeobecne možno samozrejme stanoviť ľubovoľný algoritmus pre ľubovoľný text, kde napríklad ako hodnoty do výpočtu sumy môžu vstupovať hodnoty reprezentovaná číselnými znakmi au nečíselných znakov hodnoty podľa tabuľky napr. ASCII kódy a podobne. Je potrebné si uvedomiť, že okrem významových znakov, ktoré slúžia naozaj na identifikáciu objektu, nám použiteľný rozsah údaje orezávajú takzvané kontrolky. To sú pre jednoduchosť väčšinou číselné údaje a slúži na to, aby sa významovej znakmi doplnili tak, aby po zistení sumy pre daný algoritmus vyšlo zodpovedajúce modulo.

Ak máme modulo do desať, stačí nám samozrejme jedna kontrolka. Od 11 vyššie potrebujeme v desiatkovej sústave kontrolky 2 a tak ďalej. Najčastejším prípadom je používanie modulo pre číselné údaje, kde algoritmus spočíva v tom, že pre jednotlivé pozície údaje sú stanovené váhy, ktorými sa vynásobí číslice na zodpovedajúcu pozíciu. Násobky sa sčítajú a tým sa získa potrebná suma, z ktorej sa vypočíta modulo. Ak sa niekto domnieva, že modulo má hlavne slúžiť na to, aby bolo ťažšie natypovat správny údaj alebo pred-overiť jeho existenciu, tak sa trochu mýli. Ono to síce tak pôsobí - zvlášť v dnešnej dobe, keď je existencia záznamov overovaná oproti databáze. Pôvodný účel a využitie modula je ale trochu hlbšie. Pôvodne bolo postavené tak, aby čo najviac zachytávala chyby, ktoré vznikajú pri ručnom robení údajov. Ide najčastejšie o vynechanie znaku, zdvojenie znaku alebo jeho prehodenie. To sú chyby úplne bežné, a hoci je veľká snaha a maximálne úsilie o prevedenie tejto činnosti na "techniku", je jasné, že sa ešte pomerne dlho bude na niektorých miestach používať, pretože technické riešenia sa pre tieto prípady budú ešte dlho pohybovať v oblasti neefektívnosti.

Pozrieme Ak sa na oblasť nášho bankovníctva, tak pôvodne bolo číslo účtu chránené modulo 10 s opakujúcimi sa váhami 1,3 a 5. Pri inovácii systému bolo prevedené na modulo 11 s váhami od pravej strany doľava, ktoré zodpovedajú mocninám 2. To je 1, 2, 4, 8 atď. Podľa teoretikov najúčinnejšia kombinácia. Je to krásna ukážka, že teória je len teória a občas sa do praxe netrafí. Prečo o tom tak "nepekne" hovorím. Keď sa totiž pozriete na rad váh tak, zistíte, že pridám ak na koniec rady hodnotu "0", tak pre tento reťazec musí modulo vychádzať taky. Ak predtým súčet bol deliteľný bezo zvyšku, teraz bude každé číslo vynásobené číslicu dvakrát väčšia, a suma tým pádom musí byť opäť deliteľná bezozbytku. Z toho vyplýva, že nové (aktuálne) riešenie nechytá vypustenie koncových núl. Keď bude trochu premýšľať, zistíme, že diera je ešte väčší. Totiž toto riešenie tiež nechytá vypustené alebo vložené nuly medzi dvoma časťami, pre ktoré samostatne vychádza modulo.

Podarilo sa mi vo Vás vzbudiť pocit, že tá inovácia bola krok z dažďa pod odkvap. Tak mu nepodliehajte, ono to totiž nie je pravda. Keď niečo analyzujeme, tak by sme nemali mať žiadny ani pocitový "záujem" na výsledku, potom totiž nehľadáme ako to vlastne je, ale hľadáme dôkazy na to, že je to tak, ako by sme si priali. A presne v duchu týchto pravidiel, som sa rozhodol, že to lepšie preskúmam. Rozhodol som sa napísať program (vo VB.NET a je priložený), pomocou ktorého si zistím ako to vlastne je. Ten môj pokus mal nasledujúci postup.

  1. Vygeneroval som 50 000 náhodných rôznych 6místných kombinácií ako základ pre vytvorenie testovacích dát
  2. Zo základnej sady som vytvoril dáta pre testovanie modulo 11 tým, že som ich doplnil na 8-miestne reťazca so zodpovedajúcimi kontrolkami pre modulo 11
  3. Rovnakým spôsobom som vytvoril dáta pre testovanie starého spôsobu s modulo 10 (jedna kontrolka bola "0".). A tým som získal prakticky zhodná dáta pre oba prípady.
  4. Potom som napísal program, ktorý postupne bral jednotlivé údaje. A pre každý údaj vytvoril nové kombinácie s tým, že postupne vynechával jeden znak na každej pozícii a v druhej fáze ho naopak zdvojili a v tretej fáze postupne prehodil každú dvojicu. Pre každú takto získanú kombináciu som skontroloval, či u nej vychádza zodpovedajúce modulo.

Výsledky boli prekvapujúce a sú nasledujúce:

Štatistika spracovanie

Modulo 11

počet prípadov 450 000 testovaných kombinácií
Vynechanie znaku - z toho nezachytený 32 190
Po zdvojenie nezachytený 32 190
Po prehodenie nezachytený 39 595
Modulo 10
počet prípadov 450 000 testovaných kombinácií
Vynechanie znaku - z toho nezachytený 44 991
Po zdvojenie nezachytený 40 048
Po prehodenie nezachytený 79 749
Prehodenie malo o 1/8 menej kombinácií.

V percentuálnom vyjadrení to dopadlo nasledovne:

Nezachytené zmeny

Modulo11

zdvojenie 7,15%
vynechanie 7,15%
Celkom 14,31%
prehodenie 7,70%
Celkom s prehodením 22,01%
Modulo10
zdvojenie 10,00%
vynechanie 8,90%
Celkom 18,90%
prehodenie 15,51%
Celkom s prehodením 34,40%
Je zaujímavé, že cez tie diery, o ktorých som hovoril má modulo 11 o tretinu lepší "zlé" výsledky než modulo 10. Musíme si uvedomiť, že sa nejedná o účinnosť zachytávania, ale naopak o neúčinnosť. Čo je ďalej veľmi zaujímavé a je spôsobené už spomínanou radom mocnín dvojky, je to, že počet chýb pri vynechaní znaku a pri zdvojenie znaku je zhodný a táto súvislosť bola bez ohľadu na počet testovacích prípadov. Ak nejaká kombinácia umožňuje nejakú pozíciu vynechať, bez toho aby sa tým porušilo modulo 11, tak súčasne umožňuje aj hodnotu na zhodné pozíciu zdvojiť. Najprv som hľadal, či som sa neplietol v programe. Dokonca som si začal v programe zapisovať protokol týchto prípadov, ale potom mi došlo, s čím to súvisí.

Čo z uvedeného vyplýva? Modulo 11 je naozaj účinnejší než staré modulo 10. Je schopné zachytiť 78% možných bežných chýb typovanie, a ak by sa pri prideľovaní nových hodnôt vylúčili kombinácia dovoľujúca vynechanie resp. zdvojenie, tak by sa účinnosť zdvihla ešte na 85%. To ale vzhľadom na rozsah zachytenie chýb, v ktorom sa pohybujeme, pravdepodobnosti chyby a obmedzenia významového rozsahu identifikátora, by bolo už neefektívne.


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 836x (559 B)

 

Všetky články v sekcii
Články nielen o programovaní
Článok pre vás napísal Petr Vocel
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se méně soustředí na nástroje a pozornost věnuje více tomu jak dostat funkčnost reaálného světa do počítače.
Aktivity