Jak validovat, zda je číslo účtu platné v ČR
Pokud píšete aplikace, do které uživatel zadává čísla účtů, je vhodné číslo validovat, abyste chránili uživatele před sebou samými, tzn. v tomto případě před jejich překlepy.
Z čeho se tedy takové číslo účtu skládá?
Jde o maximálně 16 číslic ve dvou částech nazvaných předčíslí (max 6 číslic) a základní část čísla účtu (max 10 číslic) + kód platebního styku, který má 4 znaky (0100 je např. KB, 5500 je Raiffeisen bank atd..)
Příklad čísla účtu, které patří společnosti T-Mobile, je např. 19-2235210247/0100 (je uvedeno veřejně na www). Dále vyhláška říká, že kód platebního styku (=kód banky) musí být jasně oddělen. Je zvykem používat znak „/“
V IT pohledu tedy (6+10+4 číslice)
0000192235210247 / 0100
0100 není moc zajímavé, existuje seznam kódu bank, které vydává ČNB, např. zde, stačí ověřit, zda je v seznamu.
Budeme tedy ověřovat, zda je platné číslo 0000192235210247.
Číslic je 16 (2 na 4 ? náhoda?) tak si je očíslujeme, správný programátor čísluje samozřejmě od 0 ? a odzadu.
Číslice | Hodnota |
---|---|
15. číslice | 0 |
14. číslice | 0 |
13. číslice | 0 |
12. číslice | 0 |
11. číslice | 1 |
10. číslice | 9 |
9. číslice | 2 |
8. číslice | 2 |
7. číslice | 3 |
6. číslice | 5 |
5. číslice | 2 |
4. číslice | 1 |
3. číslice | 0 |
2. číslice | 2 |
1. číslice | 4 |
0. číslice | 7 |
Jasné?
Nyní potřebujete váhy jednotlivých číslic. Máte teď 2 možnosti. Pokud je jen chcete znát, přeskočte odstavec. Pokud jste alespoň trochu duší matematik, popíšu pro Vás výpočet.
Pro výpočet váhy potřebujete vědět, jak umocňovat a co je to modulo ?. Vzorec je snadný pokud chcete znát váhu u n-té číslice, umocníte 2 na N a z toho celého uděláte modulo 11. Řečí Excelu =MOD(POWER(2;N);11)
Např. tedy u patnácté číslice (z hlediska zákazníka první, z hlediska programátora poslední) je to 2 na 15 MOD 11 tzn. 10
Zde jsou vypočtené váhy.
Číslice | Hodnota |
---|---|
15. číslice | 10 |
14. číslice | 5 |
13. číslice | 8 |
12. číslice | 4 |
11. číslice | 2 |
10. číslice | 1 |
9. číslice | 6 |
8. číslice | 3 |
7. číslice | 7 |
6. číslice | 9 |
5. číslice | 10 |
4. číslice | 5 |
3. číslice | 8 |
2. číslice | 4 |
1. číslice | 2 |
0. číslice | 1 |
A teď je to už snadné. Každou číslici v čísle učtu vynásobíte jeho váhou a výsledek sečteme. Na závěr ověříte, zda výsledek je bezezbytku dělitelný 11 (MOD 11 = 0). Potom je číslo účtu validní. To ale samozřejmě neznamená, že existuje a vůbec to negarantuje, že toto číslo účtu patří dané společnosti.
Příklad s účtem T-mobile:
7 (nultá číslice v čísle účtu=poslední)*1(váha nulté číslice) + 4*2 + 2*4 + 0*8 + 1*5 + 2*10 + 5*9 + 3*7 + 2*3 + 2*6 + 9*1 + 1*2 = 143 a světe div se / 11 = 13 bezezbytku
Proč to všechno? Lidé často dělají překlepy. Tato validace zajistí, že pokud se zákazník splete právě v jedné číslici, tak číslo nebude validní a hned na to budete upozorněni. S velkou pravděpodobností, pokud spletete 2 číslice, stále se asi netrefíte do jiného čísla. Pokud 2 číslice prohodíte, číslo nebude skoro určitě validní.
Tento systém vůbec neřeší, zda dané číslu účtu už neexistuje u jiné banky, takže opravdu můžete mít stejné číslo jako někdo jiný u banky konkurenční. Banky to často používají jako konkurenční zbraň ?. Některé banky do čísla účtu kódují další informace, jako např. číslo pobočky atd.
Příště si něco povíme o validaci IBAN ?.