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 9
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 🙂.