diff --git a/client/src/components/Header.tsx b/client/src/components/Header.tsx index 03a2beb..168f83f 100644 --- a/client/src/components/Header.tsx +++ b/client/src/components/Header.tsx @@ -19,8 +19,58 @@ export default function Header() { setModalOpen(false); } + const isValidInteger = (str) => { + str = str.trim(); + if (!str) { + return false; + } + str = str.replace(/^0+/, "") || "0"; + const n = Math.floor(Number(str)); + return n !== Infinity && String(n) === str && n >= 0; + } + const save = () => { - // TODO validace na modulo 11 + if (bankAccountRef.current?.value) { + try { + // Validace kódu banky + if (bankAccountRef.current?.value.indexOf('/') < 0) { + throw Error("Číslo účtu neobsahuje lomítko/kód banky") + } + const split = bankAccountRef.current?.value.split("/"); + if (split[1].length !== 4) { + throw Error("Kód banky musí být 4 číslice") + } + if (!isValidInteger(split[1])) { + throw Error("Kód banky není číslo") + } + + // Validace čísla a předčíslí + let cislo = split[0]; + + if (cislo.indexOf('-') > 0) { + cislo = cislo.replace('-', ''); + } + if (!isValidInteger(cislo)) { + throw Error("Předčíslí nebo číslo účtu neobsahuje pouze číslice") + } + if (cislo.length < 16) { + cislo = cislo.padStart(16, '0'); + } + let sum = 0; + for (var i = 0; i < cislo.length; i++) { + const char = cislo.charAt(i); + const order = (cislo.length - 1) - i; + const weight = (2 ** order) % 11; + sum += Number.parseInt(char) * weight + } + if (sum % 11 != 0) { + throw Error("Číslo účtu je neplatné") + } + } catch (e) { + alert(e.message) + return + } + } bank?.setBankAccountNumber(bankAccountRef.current?.value); bank?.setBankAccountHolderName(nameRef.current?.value); closeModal(); @@ -37,14 +87,14 @@ export default function Header() { - + Bankovní účet -

Nastavením čísla účtu umožníte automatické generování QR kódů pro úhradu za vámi provedené objednávky v rámci Pizza day.
Pokud vaše číslo účtu neobsahuje předčíslí, je možné ho zcela vynechat.

Poznámka: Číslo účtu není aktuálně nijak validováno. Ověřte si jeho správnost.

- Číslo účtu:
- Název příjemce (nepovinné): +

Nastavením čísla účtu umožníte automatické generování QR kódů pro úhradu za vámi provedené objednávky v rámci Pizza day.
Pokud vaše číslo účtu neobsahuje předčíslí, je možné ho zcela vynechat.

Číslo účtu není ukládáno na serveru, posílá se na něj pouze za účelem vygenerování QR kódů.

+ Číslo účtu:
+ Název příjemce (jméno majitele účtu):