UNPKG

cz-bank-account-validator

Version:

A small and handy library to validate CZ bank account numbers. Running in a browser, in Node.js and also as an ES6 module.

56 lines (45 loc) 1.74 kB
import { bankCodes } from './bankCodes'; import { getBankAccountGroups, mod11 } from './util'; export const getAllBankCodes = () => { return bankCodes; }; /** * http://www.zlatakoruna.info/zpravy/ucty/cislo-uctu-v-cr * @param bankAccount */ export const validate = (bankAccount = '') => { if (typeof bankAccount !== 'string' || bankAccount.length < 1) { return false; } const bankCodeKeys = Object.keys(getAllBankCodes()); const bankAccountMatchedGroups = getBankAccountGroups(bankAccount); if (bankAccountMatchedGroups) { const { prefixCode, accountNumber, bankCode } = bankAccountMatchedGroups; const prefixCodeValid = prefixCode ? mod11(prefixCode) : true; // can be empty const accountNumberValid = accountNumber ? mod11(accountNumber) : false; const bankCodeValid = bankCode ? bankCodeKeys.includes(bankCode) : false; return prefixCodeValid && accountNumberValid && bankCodeValid; } return false; }; export const getAccountPrefix = (bankAccount) => { if (validate(bankAccount)) { const bankAccountMatchedGroups = getBankAccountGroups(bankAccount); return bankAccountMatchedGroups?.prefixCode ?? null; } return null; }; export const getAccountNumber = (bankAccount) => { if (validate(bankAccount)) { const bankAccountMatchedGroups = getBankAccountGroups(bankAccount); return bankAccountMatchedGroups?.accountNumber ?? null; } return null; }; export const getBankCode = (bankAccount) => { if (validate(bankAccount)) { const bankAccountMatchedGroups = getBankAccountGroups(bankAccount); return bankAccountMatchedGroups?.bankCode ?? null; } return null; };