UNPKG

ibankit

Version:

Validation, field extraction and creation of IBAN, BBAN, BIC numbers

97 lines 8.32 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.validate = exports.hasBranchCode = exports.getBranchCode = exports.getLocationCode = exports.getCountryCode = exports.getBankCode = void 0; const exceptions_1 = require("./exceptions"); const country_1 = require("./country"); const BIC8_LENGTH = 8; const BIC11_LENGTH = 11; const BANK_CODE_INDEX = 0; const BANK_CODE_LENGTH = 4; const COUNTRY_CODE_INDEX = BANK_CODE_INDEX + BANK_CODE_LENGTH; const COUNTRY_CODE_LENGTH = 2; const LOCATION_CODE_INDEX = COUNTRY_CODE_INDEX + COUNTRY_CODE_LENGTH; const LOCATION_CODE_LENGTH = 2; const BRANCH_CODE_INDEX = LOCATION_CODE_INDEX + LOCATION_CODE_LENGTH; const BRANCH_CODE_LENGTH = 3; const ucRegex = /^[A-Z]+$/; const ucnumRegex = /^[A-Z0-9]+$/; function getBankCode(bic) { return bic.substring(BANK_CODE_INDEX, BANK_CODE_INDEX + BANK_CODE_LENGTH); } exports.getBankCode = getBankCode; function getCountryCode(bic) { return bic.substring(COUNTRY_CODE_INDEX, COUNTRY_CODE_INDEX + COUNTRY_CODE_LENGTH); } exports.getCountryCode = getCountryCode; function getLocationCode(bic) { return bic.substring(LOCATION_CODE_INDEX, LOCATION_CODE_INDEX + LOCATION_CODE_LENGTH); } exports.getLocationCode = getLocationCode; function getBranchCode(bic) { return bic.substring(BRANCH_CODE_INDEX, BRANCH_CODE_INDEX + BRANCH_CODE_LENGTH); } exports.getBranchCode = getBranchCode; function hasBranchCode(bic) { return bic.length === BIC11_LENGTH; } exports.hasBranchCode = hasBranchCode; function validateEmpty(bic) { if (bic == null) { throw new exceptions_1.FormatException(exceptions_1.FormatViolation.NOT_NULL, "Null can't be a valid Bic."); } if (bic.length === 0) { throw new exceptions_1.FormatException(exceptions_1.FormatViolation.NOT_EMPTY, "Empty string can't be a valid Bic."); } } function validateLength(bic) { if (bic.length !== BIC8_LENGTH && bic.length !== BIC11_LENGTH) { throw new exceptions_1.FormatException(exceptions_1.FormatViolation.BIC_LENGTH_8_OR_11, `Bic length must be ${BIC8_LENGTH} or ${BIC11_LENGTH}`); } } function validateCase(bic) { if (bic !== bic.toUpperCase()) { throw new exceptions_1.FormatException(exceptions_1.FormatViolation.BIC_ONLY_UPPER_CASE_LETTERS, "Bic must contain only upper case letters."); } } function validateBankCode(bic) { const bankCode = getBankCode(bic); if (!ucnumRegex.test(bankCode)) { throw new exceptions_1.FormatException(exceptions_1.FormatViolation.BANK_CODE_ONLY_LETTERS, "Bank code must contain only letters or digits.", bankCode); } } function validateCountryCode(bic) { const countryCode = getCountryCode(bic).trim(); if (countryCode.length < COUNTRY_CODE_LENGTH || countryCode !== countryCode.toUpperCase() || !ucRegex.test(countryCode)) { throw new exceptions_1.FormatException(exceptions_1.FormatViolation.COUNTRY_CODE_ONLY_UPPER_CASE_LETTERS, "Bic country code must contain upper case letters", countryCode); } if ((0, country_1.countryByCode)(countryCode) == null) { throw new exceptions_1.UnsupportedCountryException("Country code is not supported.", countryCode); } } function validateLocationCode(bic) { const locationCode = getLocationCode(bic); if (!ucnumRegex.test(locationCode)) { throw new exceptions_1.FormatException(exceptions_1.FormatViolation.LOCATION_CODE_ONLY_LETTERS_OR_DIGITS, "Location code must contain only letters or digits.", locationCode); } } function validateBranchCode(bic) { const branchCode = getBranchCode(bic); if (!ucnumRegex.test(branchCode)) { throw new exceptions_1.FormatException(exceptions_1.FormatViolation.BRANCH_CODE_ONLY_LETTERS_OR_DIGITS, "Branch code must contain only letters or digits.", branchCode); } } function validate(bic) { validateEmpty(bic); validateLength(bic); validateCase(bic); validateBankCode(bic); validateCountryCode(bic); validateLocationCode(bic); if (hasBranchCode(bic)) { validateBranchCode(bic); } } exports.validate = validate; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmljVXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaWNVdGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUE2RjtBQUM3Rix1Q0FBMEM7QUFFMUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUV4QixNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFDMUIsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDM0IsTUFBTSxrQkFBa0IsR0FBRyxlQUFlLEdBQUcsZ0JBQWdCLENBQUM7QUFDOUQsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUFDOUIsTUFBTSxtQkFBbUIsR0FBRyxrQkFBa0IsR0FBRyxtQkFBbUIsQ0FBQztBQUNyRSxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQUMvQixNQUFNLGlCQUFpQixHQUFHLG1CQUFtQixHQUFHLG9CQUFvQixDQUFDO0FBQ3JFLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0FBRTdCLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQztBQUMzQixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUM7QUFFakMsU0FBZ0IsV0FBVyxDQUFDLEdBQVc7SUFDckMsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxlQUFlLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztBQUM1RSxDQUFDO0FBRkQsa0NBRUM7QUFFRCxTQUFnQixjQUFjLENBQUMsR0FBVztJQUN4QyxPQUFPLEdBQUcsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEdBQUcsbUJBQW1CLENBQUMsQ0FBQztBQUNyRixDQUFDO0FBRkQsd0NBRUM7QUFFRCxTQUFnQixlQUFlLENBQUMsR0FBVztJQUN6QyxPQUFPLEdBQUcsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEVBQUUsbUJBQW1CLEdBQUcsb0JBQW9CLENBQUMsQ0FBQztBQUN4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