UNPKG

ibankit

Version:

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

278 lines 67.8 kB
import { CharacterType, BbanStructurePart, PartType } from "./structurePart"; import { CountryCode } from "./country"; import { FormatException, FormatViolation, RequiredPartTypeMissing } from "./exceptions"; function mod11(value, weights) { return ((11 - (value.split("").reduce((acc, s, idx) => acc + parseInt(s, 10) * weights[idx % weights.length], 0) % 11)) % 11); } function nationalES(bban, structure) { const weights = [1, 2, 4, 8, 5, 10, 9, 7, 3, 6]; const combined = [PartType.BANK_CODE, PartType.BRANCH_CODE].map((p) => structure.extractValueMust(bban, p)).join(""); function to11(v) { if (v === 10) { return 1; } else if (v === 11) { return 0; } return v; } const d1 = to11(mod11(`00${combined}`, weights)); const d2 = to11(mod11(structure.extractValueMust(bban, PartType.ACCOUNT_NUMBER), weights)); return `${d1}${d2}`; } function nationalFR(bban, structure) { const replaceChars = { ["[AJ]"]: "1", ["[BKS]"]: "2", ["[CLT]"]: "3", ["[DMU]"]: "4", ["[ENV]"]: "5", ["[FOW]"]: "6", ["[GPX]"]: "7", ["[HQY]"]: "8", ["[IRZ]"]: "9", }; let combined = [PartType.BANK_CODE, PartType.BRANCH_CODE, PartType.ACCOUNT_NUMBER] .map((p) => String(structure.extractValue(bban, p))) .join("") + "00"; Object.entries(replaceChars).map(([k, v]) => (combined = combined.replace(new RegExp(k, "g"), v))); const expected = 97 - combined.split("").reduce((acc, v) => (acc * 10 + parseInt(v)) % 97, 0); return String(expected).padStart(2, "0"); } function nationalIT(bban, structure) { const even = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]; const odd = [1, 0, 5, 7, 9, 13, 15, 17, 19, 21, 2, 4, 18, 20, 11, 3, 6, 8, 12, 14, 16, 10, 22, 25, 24, 23]; const V0 = "0".charCodeAt(0); const V9 = "9".charCodeAt(0); const VA = "A".charCodeAt(0); const value = [PartType.BANK_CODE, PartType.BRANCH_CODE, PartType.ACCOUNT_NUMBER] .map((p) => structure.extractValueMust(bban, p)) .join("") .split("") .map((v) => v.toUpperCase().charCodeAt(0)) .map((v) => v - (V0 <= v && v <= V9 ? V0 : VA)) .reduce((acc, v, idx) => acc + (idx % 2 === 0 ? odd[v] : even[v]), 0) % 26; return String.fromCharCode(VA + value); } function nationalNO(bban, structure) { const value = [PartType.BANK_CODE, PartType.ACCOUNT_NUMBER].map((p) => structure.extractValueMust(bban, p)).join(""); return String(mod11(value, [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]) % 10); } function nationalPT(bban, structure) { const V0 = "0".charCodeAt(0); const weights = [73, 17, 89, 38, 62, 45, 53, 15, 50, 5, 49, 34, 81, 76, 27, 90, 9, 30, 3]; const remainder = [PartType.BANK_CODE, PartType.BRANCH_CODE, PartType.ACCOUNT_NUMBER] .map((p) => structure.extractValueMust(bban, p)) .join("") .split("") .map((v) => v.charCodeAt(0)) .reduce((acc, v, idx) => (acc + (v - V0) * weights[idx]) % 97, 0); return String(98 - remainder).padStart(2, "0"); } export class BbanStructure { constructor(...entries) { this.entries = entries; } getParts() { return this.entries; } validate(bban) { this.validateBbanLength(bban); this.validateBbanEntries(bban); } extractValue(bban, partType) { let bbanPartOffset = 0; let result = null; for (const part of this.getParts()) { const partLength = part.getLength(); const partValue = bban.substring(bbanPartOffset, bbanPartOffset + partLength); bbanPartOffset = bbanPartOffset + partLength; if (part.getPartType() == partType) { result = (result || "") + partValue; } } return result; } extractValueMust(bban, partType) { const value = this.extractValue(bban, partType); if (value === null) { throw new RequiredPartTypeMissing(`Required part type [${partType}] missing`); } return value; } static forCountry(countryCode) { if (!countryCode) { return null; } return this.structures[countryCode] || null; } static getEntries() { return Object.values(this.structures); } static supportedCountries() { return Object.keys(this.structures); } getBbanLength() { return this.entries.reduce((acc, e) => acc + e.getLength(), 0); } validateBbanLength(bban) { const expectedBbanLength = this.getBbanLength(); const bbanLength = bban.length; if (expectedBbanLength != bbanLength) { throw new FormatException(FormatViolation.BBAN_LENGTH, `[${bban}] length is ${bbanLength}, expected BBAN length is: ${expectedBbanLength}`, String(bbanLength), String(expectedBbanLength)); } } validateBbanEntries(bban) { let offset = 0; for (const part of this.getParts()) { const partLength = part.getLength(); const entryValue = bban.substring(offset, offset + partLength); offset = offset + partLength; this.validateBbanEntryCharacterType(bban, part, entryValue); } } validateBbanEntryCharacterType(bban, part, entryValue) { if (!part.validate(entryValue)) { switch (part.getCharacterType()) { case CharacterType.a: throw new FormatException(FormatViolation.BBAN_ONLY_UPPER_CASE_LETTERS, `[${entryValue}] must contain only upper case letters.`, entryValue); case CharacterType.c: throw new FormatException(FormatViolation.BBAN_ONLY_DIGITS_OR_LETTERS, `[${entryValue}] must contain only digits or letters.`, entryValue); case CharacterType.n: throw new FormatException(FormatViolation.BBAN_ONLY_DIGITS, `[${entryValue}] must contain only digits.`, entryValue); } } if (part.getPartType() === PartType.NATIONAL_CHECK_DIGIT && part.hasGenerator) { const expected = part.generate(bban, this); if (entryValue !== expected) { throw new FormatException(FormatViolation.NATIONAL_CHECK_DIGIT, `national check digit(s) don't match expect=[${expected}] actual=[${entryValue}]`, expected, entryValue); } } } } BbanStructure.bbanFR = new BbanStructure(BbanStructurePart.bankCode(5, CharacterType.n), BbanStructurePart.branchCode(5, CharacterType.n), BbanStructurePart.accountNumber(11, CharacterType.c), BbanStructurePart.nationalCheckDigit(2, CharacterType.n, nationalFR)); BbanStructure.structures = { [CountryCode.AD]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.n), BbanStructurePart.branchCode(4, CharacterType.n), BbanStructurePart.accountNumber(12, CharacterType.c)), [CountryCode.AE]: new BbanStructure(BbanStructurePart.bankCode(3, CharacterType.n), BbanStructurePart.accountNumber(16, CharacterType.c)), [CountryCode.AL]: new BbanStructure(BbanStructurePart.bankCode(3, CharacterType.n), BbanStructurePart.branchCode(4, CharacterType.n), BbanStructurePart.nationalCheckDigit(1, CharacterType.n), BbanStructurePart.accountNumber(16, CharacterType.c)), [CountryCode.AO]: new BbanStructure(BbanStructurePart.accountNumber(21, CharacterType.n)), [CountryCode.AT]: new BbanStructure(BbanStructurePart.bankCode(5, CharacterType.n), BbanStructurePart.accountNumber(11, CharacterType.n)), [CountryCode.AZ]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.a), BbanStructurePart.accountNumber(20, CharacterType.c)), [CountryCode.BA]: new BbanStructure(BbanStructurePart.bankCode(3, CharacterType.n), BbanStructurePart.branchCode(3, CharacterType.n), BbanStructurePart.accountNumber(8, CharacterType.n), BbanStructurePart.nationalCheckDigit(2, CharacterType.n)), [CountryCode.BE]: new BbanStructure(BbanStructurePart.bankCode(3, CharacterType.n), BbanStructurePart.accountNumber(7, CharacterType.n), BbanStructurePart.nationalCheckDigit(2, CharacterType.n, (bban, structure) => { const accountNumber = structure.extractValue(bban, PartType.ACCOUNT_NUMBER); const bankCode = structure.extractValue(bban, PartType.BANK_CODE); if (accountNumber === null || bankCode === null) { throw new FormatException(FormatViolation.NOT_EMPTY, "account number or bank code missing"); } const value = parseInt(`${bankCode}${accountNumber}`, 10); const remainder = Math.floor(value / 97); let expected = value - remainder * 97; if (expected === 0) { expected = 97; } return String(expected).padStart(2, "0"); })), [CountryCode.BF]: new BbanStructure(BbanStructurePart.accountNumber(23, CharacterType.n)), [CountryCode.BG]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.a), BbanStructurePart.branchCode(4, CharacterType.n), BbanStructurePart.accountType(2, CharacterType.n), BbanStructurePart.accountNumber(8, CharacterType.c)), [CountryCode.BH]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.a), BbanStructurePart.accountNumber(14, CharacterType.c)), [CountryCode.BI]: new BbanStructure(BbanStructurePart.bankCode(5, CharacterType.n), BbanStructurePart.branchCode(5, CharacterType.n), BbanStructurePart.accountNumber(11, CharacterType.n), BbanStructurePart.nationalCheckDigit(2, CharacterType.n)), [CountryCode.BJ]: new BbanStructure(BbanStructurePart.bankCode(5, CharacterType.c), BbanStructurePart.branchCode(5, CharacterType.n), BbanStructurePart.accountNumber(12, CharacterType.n), BbanStructurePart.nationalCheckDigit(2, CharacterType.n, nationalFR)), [CountryCode.BR]: new BbanStructure(BbanStructurePart.bankCode(8, CharacterType.n), BbanStructurePart.branchCode(5, CharacterType.n), BbanStructurePart.accountNumber(10, CharacterType.n), BbanStructurePart.accountType(1, CharacterType.a), BbanStructurePart.ownerAccountNumber(1, CharacterType.c)), [CountryCode.BY]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.c), BbanStructurePart.accountType(4, CharacterType.n), BbanStructurePart.accountNumber(16, CharacterType.c)), [CountryCode.CF]: new BbanStructure(BbanStructurePart.accountNumber(23, CharacterType.n)), [CountryCode.CG]: new BbanStructure(BbanStructurePart.accountNumber(23, CharacterType.n)), [CountryCode.CH]: new BbanStructure(BbanStructurePart.bankCode(5, CharacterType.n), BbanStructurePart.accountNumber(12, CharacterType.c)), [CountryCode.CI]: new BbanStructure(BbanStructurePart.bankCode(2, CharacterType.c), BbanStructurePart.accountNumber(22, CharacterType.n)), [CountryCode.CM]: new BbanStructure(BbanStructurePart.accountNumber(23, CharacterType.n)), [CountryCode.CR]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.n), BbanStructurePart.accountNumber(14, CharacterType.n)), [CountryCode.CV]: new BbanStructure(BbanStructurePart.accountNumber(21, CharacterType.n)), [CountryCode.CY]: new BbanStructure(BbanStructurePart.bankCode(3, CharacterType.n), BbanStructurePart.branchCode(5, CharacterType.n), BbanStructurePart.accountNumber(16, CharacterType.c)), [CountryCode.CZ]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.n), BbanStructurePart.branchCode(6, CharacterType.n), BbanStructurePart.accountNumber(10, CharacterType.n)), [CountryCode.DE]: new BbanStructure(BbanStructurePart.bankCode(8, CharacterType.n), BbanStructurePart.accountNumber(10, CharacterType.n)), [CountryCode.DJ]: new BbanStructure(BbanStructurePart.bankCode(5, CharacterType.n), BbanStructurePart.branchCode(5, CharacterType.n), BbanStructurePart.accountNumber(11, CharacterType.n), BbanStructurePart.nationalCheckDigit(2, CharacterType.n)), [CountryCode.DK]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.n), BbanStructurePart.accountNumber(10, CharacterType.n)), [CountryCode.DO]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.c), BbanStructurePart.accountNumber(20, CharacterType.n)), [CountryCode.DZ]: new BbanStructure(BbanStructurePart.accountNumber(20, CharacterType.n)), [CountryCode.EE]: new BbanStructure(BbanStructurePart.bankCode(2, CharacterType.n), BbanStructurePart.branchCode(2, CharacterType.n), BbanStructurePart.accountNumber(11, CharacterType.n), BbanStructurePart.nationalCheckDigit(1, CharacterType.n)), [CountryCode.EG]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.n), BbanStructurePart.branchCode(4, CharacterType.n), BbanStructurePart.accountNumber(17, CharacterType.n)), [CountryCode.ES]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.n), BbanStructurePart.branchCode(4, CharacterType.n), BbanStructurePart.nationalCheckDigit(2, CharacterType.n, nationalES), BbanStructurePart.accountNumber(10, CharacterType.n)), [CountryCode.FI]: new BbanStructure(BbanStructurePart.bankCode(3, CharacterType.n), BbanStructurePart.accountNumber(11, CharacterType.n)), [CountryCode.FK]: new BbanStructure(BbanStructurePart.bankCode(2, CharacterType.a), BbanStructurePart.accountNumber(12, CharacterType.n)), [CountryCode.FO]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.n), BbanStructurePart.accountNumber(9, CharacterType.n), BbanStructurePart.nationalCheckDigit(1, CharacterType.n)), [CountryCode.FR]: BbanStructure.bbanFR, [CountryCode.GA]: BbanStructure.bbanFR, [CountryCode.GB]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.a), BbanStructurePart.branchCode(6, CharacterType.n), BbanStructurePart.accountNumber(8, CharacterType.n)), [CountryCode.GE]: new BbanStructure(BbanStructurePart.bankCode(2, CharacterType.a), BbanStructurePart.accountNumber(16, CharacterType.n)), [CountryCode.GI]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.a), BbanStructurePart.accountNumber(15, CharacterType.c)), [CountryCode.GL]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.n), BbanStructurePart.accountNumber(10, CharacterType.n)), [CountryCode.GQ]: BbanStructure.bbanFR, [CountryCode.GR]: new BbanStructure(BbanStructurePart.bankCode(3, CharacterType.n), BbanStructurePart.branchCode(4, CharacterType.n), BbanStructurePart.accountNumber(16, CharacterType.c)), [CountryCode.GT]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.c), BbanStructurePart.currencyType(2, CharacterType.n), BbanStructurePart.accountType(2, CharacterType.n), BbanStructurePart.accountNumber(16, CharacterType.c)), [CountryCode.HR]: new BbanStructure(BbanStructurePart.bankCode(7, CharacterType.n), BbanStructurePart.accountNumber(10, CharacterType.n)), [CountryCode.HN]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.a), BbanStructurePart.accountNumber(20, CharacterType.n)), [CountryCode.HU]: new BbanStructure(BbanStructurePart.bankCode(3, CharacterType.n), BbanStructurePart.branchCode(4, CharacterType.n), BbanStructurePart.branchCheckDigit(1, CharacterType.n), BbanStructurePart.accountNumber(15, CharacterType.n), BbanStructurePart.nationalCheckDigit(1, CharacterType.n)), [CountryCode.IE]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.a), BbanStructurePart.branchCode(6, CharacterType.n), BbanStructurePart.accountNumber(8, CharacterType.n)), [CountryCode.IL]: new BbanStructure(BbanStructurePart.bankCode(3, CharacterType.n), BbanStructurePart.branchCode(3, CharacterType.n), BbanStructurePart.accountNumber(13, CharacterType.n)), [CountryCode.IQ]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.a), BbanStructurePart.branchCode(3, CharacterType.n), BbanStructurePart.accountNumber(12, CharacterType.n)), [CountryCode.IR]: new BbanStructure(BbanStructurePart.bankCode(3, CharacterType.n), BbanStructurePart.accountNumber(19, CharacterType.n)), [CountryCode.IS]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.n), BbanStructurePart.branchCode(2, CharacterType.n), BbanStructurePart.accountNumber(6, CharacterType.n), BbanStructurePart.identificationNumber(10, CharacterType.n)), [CountryCode.IT]: new BbanStructure(BbanStructurePart.nationalCheckDigit(1, CharacterType.a, nationalIT), BbanStructurePart.bankCode(5, CharacterType.n), BbanStructurePart.branchCode(5, CharacterType.n), BbanStructurePart.accountNumber(12, CharacterType.c)), [CountryCode.JO]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.a), BbanStructurePart.branchCode(4, CharacterType.n), BbanStructurePart.accountNumber(18, CharacterType.c)), [CountryCode.KM]: new BbanStructure(BbanStructurePart.accountNumber(23, CharacterType.n)), [CountryCode.KW]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.a), BbanStructurePart.accountNumber(22, CharacterType.c)), [CountryCode.KZ]: new BbanStructure(BbanStructurePart.bankCode(3, CharacterType.n), BbanStructurePart.accountNumber(13, CharacterType.c)), [CountryCode.LB]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.n), BbanStructurePart.accountNumber(20, CharacterType.c)), [CountryCode.LC]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.a), BbanStructurePart.accountNumber(24, CharacterType.n)), [CountryCode.LI]: new BbanStructure(BbanStructurePart.bankCode(5, CharacterType.n), BbanStructurePart.accountNumber(12, CharacterType.c)), [CountryCode.LT]: new BbanStructure(BbanStructurePart.bankCode(5, CharacterType.n), BbanStructurePart.accountNumber(11, CharacterType.n)), [CountryCode.LU]: new BbanStructure(BbanStructurePart.bankCode(3, CharacterType.n), BbanStructurePart.accountNumber(13, CharacterType.c)), [CountryCode.LV]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.a), BbanStructurePart.accountNumber(13, CharacterType.c)), [CountryCode.LY]: new BbanStructure(BbanStructurePart.bankCode(3, CharacterType.n), BbanStructurePart.branchCode(3, CharacterType.n), BbanStructurePart.accountNumber(15, CharacterType.n)), [CountryCode.MA]: new BbanStructure(BbanStructurePart.accountNumber(24, CharacterType.n)), [CountryCode.MC]: new BbanStructure(BbanStructurePart.bankCode(5, CharacterType.n), BbanStructurePart.branchCode(5, CharacterType.n), BbanStructurePart.accountNumber(11, CharacterType.c), BbanStructurePart.nationalCheckDigit(2, CharacterType.n, nationalFR)), [CountryCode.MD]: new BbanStructure(BbanStructurePart.bankCode(2, CharacterType.c), BbanStructurePart.accountNumber(18, CharacterType.c)), [CountryCode.ME]: new BbanStructure(BbanStructurePart.bankCode(3, CharacterType.n), BbanStructurePart.accountNumber(13, CharacterType.n), BbanStructurePart.nationalCheckDigit(2, CharacterType.n)), [CountryCode.MG]: new BbanStructure(BbanStructurePart.bankCode(5, CharacterType.n), BbanStructurePart.branchCode(5, CharacterType.n), BbanStructurePart.accountNumber(11, CharacterType.c), BbanStructurePart.nationalCheckDigit(2, CharacterType.n)), [CountryCode.MK]: new BbanStructure(BbanStructurePart.bankCode(3, CharacterType.n), BbanStructurePart.accountNumber(10, CharacterType.c), BbanStructurePart.nationalCheckDigit(2, CharacterType.n)), [CountryCode.ML]: new BbanStructure(BbanStructurePart.bankCode(1, CharacterType.a), BbanStructurePart.accountNumber(25, CharacterType.n)), [CountryCode.MN]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.n), BbanStructurePart.accountNumber(12, CharacterType.n)), [CountryCode.MR]: new BbanStructure(BbanStructurePart.bankCode(5, CharacterType.n), BbanStructurePart.branchCode(5, CharacterType.n), BbanStructurePart.accountNumber(11, CharacterType.n), BbanStructurePart.nationalCheckDigit(2, CharacterType.n)), [CountryCode.MT]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.a), BbanStructurePart.branchCode(5, CharacterType.n), BbanStructurePart.accountNumber(18, CharacterType.c)), [CountryCode.MU]: new BbanStructure(BbanStructurePart.bankCode(6, CharacterType.c), BbanStructurePart.branchCode(2, CharacterType.n), BbanStructurePart.accountNumber(12, CharacterType.c), BbanStructurePart.accountType(3, CharacterType.n), BbanStructurePart.currencyType(3, CharacterType.a)), [CountryCode.MZ]: new BbanStructure(BbanStructurePart.accountNumber(21, CharacterType.n)), [CountryCode.NE]: new BbanStructure(BbanStructurePart.bankCode(2, CharacterType.a), BbanStructurePart.accountNumber(22, CharacterType.n)), [CountryCode.NI]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.a), BbanStructurePart.accountNumber(20, CharacterType.n)), [CountryCode.NL]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.a), BbanStructurePart.accountNumber(10, CharacterType.n)), [CountryCode.NO]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.n), BbanStructurePart.accountNumber(6, CharacterType.n), BbanStructurePart.nationalCheckDigit(1, CharacterType.n, nationalNO)), [CountryCode.OM]: new BbanStructure(BbanStructurePart.bankCode(3, CharacterType.n), BbanStructurePart.accountNumber(16, CharacterType.n)), [CountryCode.PK]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.c), BbanStructurePart.accountNumber(16, CharacterType.c)), [CountryCode.PL]: new BbanStructure(BbanStructurePart.bankCode(3, CharacterType.n), BbanStructurePart.branchCode(4, CharacterType.n), BbanStructurePart.nationalCheckDigit(1, CharacterType.n), BbanStructurePart.accountNumber(16, CharacterType.n)), [CountryCode.PS]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.a), BbanStructurePart.accountNumber(21, CharacterType.c)), [CountryCode.PT]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.n), BbanStructurePart.branchCode(4, CharacterType.n), BbanStructurePart.accountNumber(11, CharacterType.n), BbanStructurePart.nationalCheckDigit(2, CharacterType.n, nationalPT)), [CountryCode.QA]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.a), BbanStructurePart.accountNumber(21, CharacterType.c)), [CountryCode.RO]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.a), BbanStructurePart.accountNumber(16, CharacterType.c)), [CountryCode.RS]: new BbanStructure(BbanStructurePart.bankCode(3, CharacterType.n), BbanStructurePart.accountNumber(13, CharacterType.n), BbanStructurePart.nationalCheckDigit(2, CharacterType.n)), [CountryCode.RU]: new BbanStructure(BbanStructurePart.bankCode(9, CharacterType.n), BbanStructurePart.branchCode(5, CharacterType.n), BbanStructurePart.accountNumber(15, CharacterType.c)), [CountryCode.SA]: new BbanStructure(BbanStructurePart.bankCode(2, CharacterType.n), BbanStructurePart.accountNumber(18, CharacterType.c)), [CountryCode.SC]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.a), BbanStructurePart.branchCode(2, CharacterType.n), BbanStructurePart.branchCheckDigit(2, CharacterType.n), BbanStructurePart.accountNumber(16, CharacterType.n), BbanStructurePart.currencyType(3, CharacterType.a)), [CountryCode.SD]: new BbanStructure(BbanStructurePart.bankCode(2, CharacterType.n), BbanStructurePart.accountNumber(12, CharacterType.n)), [CountryCode.SE]: new BbanStructure(BbanStructurePart.bankCode(3, CharacterType.n), BbanStructurePart.accountNumber(16, CharacterType.n), BbanStructurePart.nationalCheckDigit(1, CharacterType.n)), [CountryCode.SI]: new BbanStructure(BbanStructurePart.bankCode(2, CharacterType.n), BbanStructurePart.branchCode(3, CharacterType.n), BbanStructurePart.accountNumber(8, CharacterType.n), BbanStructurePart.nationalCheckDigit(2, CharacterType.n)), [CountryCode.SK]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.n), BbanStructurePart.accountNumber(16, CharacterType.n)), [CountryCode.SM]: new BbanStructure(BbanStructurePart.nationalCheckDigit(1, CharacterType.a, nationalIT), BbanStructurePart.bankCode(5, CharacterType.n), BbanStructurePart.branchCode(5, CharacterType.n), BbanStructurePart.accountNumber(12, CharacterType.c)), [CountryCode.SN]: new BbanStructure(BbanStructurePart.bankCode(5, CharacterType.c), BbanStructurePart.branchCode(5, CharacterType.n), BbanStructurePart.accountNumber(14, CharacterType.n)), [CountryCode.SO]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.n), BbanStructurePart.branchCode(3, CharacterType.n), BbanStructurePart.accountNumber(12, CharacterType.n)), [CountryCode.ST]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.n), BbanStructurePart.branchCode(4, CharacterType.n), BbanStructurePart.accountNumber(13, CharacterType.n)), [CountryCode.SV]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.a), BbanStructurePart.branchCode(4, CharacterType.n), BbanStructurePart.accountNumber(16, CharacterType.n)), [CountryCode.TG]: new BbanStructure(BbanStructurePart.bankCode(2, CharacterType.a), BbanStructurePart.accountNumber(22, CharacterType.n)), [CountryCode.TD]: new BbanStructure(BbanStructurePart.accountNumber(23, CharacterType.n)), [CountryCode.TL]: new BbanStructure(BbanStructurePart.bankCode(3, CharacterType.n), BbanStructurePart.accountNumber(14, CharacterType.n), BbanStructurePart.nationalCheckDigit(2, CharacterType.n)), [CountryCode.TN]: new BbanStructure(BbanStructurePart.bankCode(2, CharacterType.n), BbanStructurePart.branchCode(3, CharacterType.n), BbanStructurePart.accountNumber(13, CharacterType.c), BbanStructurePart.nationalCheckDigit(2, CharacterType.c)), [CountryCode.TR]: new BbanStructure(BbanStructurePart.bankCode(5, CharacterType.n), BbanStructurePart.nationalCheckDigit(1, CharacterType.c), BbanStructurePart.accountNumber(16, CharacterType.c)), [CountryCode.UA]: new BbanStructure(BbanStructurePart.bankCode(6, CharacterType.n), BbanStructurePart.accountNumber(19, CharacterType.n)), [CountryCode.VA]: new BbanStructure(BbanStructurePart.bankCode(3, CharacterType.c), BbanStructurePart.accountNumber(15, CharacterType.n)), [CountryCode.VG]: new BbanStructure(BbanStructurePart.bankCode(4, CharacterType.a), BbanStructurePart.accountNumber(16, CharacterType.n)), [CountryCode.XK]: new BbanStructure(BbanStructurePart.bankCode(2, CharacterType.n), BbanStructurePart.branchCode(2, CharacterType.n), BbanStructurePart.accountNumber(10, CharacterType.n), BbanStructurePart.nationalCheckDigit(2, CharacterType.n)), }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJhblN0cnVjdHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iYmFuU3RydWN0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUt6RixTQUFTLEtBQUssQ0FBQyxLQUFhLEVBQUUsT0FBaUI7SUFDN0MsT0FBTyxDQUNMLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQ3JILENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsSUFBWSxFQUFFLFNBQXdCO0lBQ3hELE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFckgsU0FBUyxJQUFJLENBQUMsQ0FBUztRQUNyQixJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDWixPQUFPLENBQUMsQ0FBQztTQUNWO2FBQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLE9BQU8sQ0FBQyxDQUFDO1NBQ1Y7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssUUFBUSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNqRCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFM0YsT0FBTyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN0QixDQUFDO0FBS0QsU0FBUyxVQUFVLENBQUMsSUFBWSxFQUFFLFNBQXdCO0lBQ3hELE1BQU0sWUFBWSxHQUFHO1FBQ25CLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRztRQUNiLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRztRQUNkLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRztRQUNkLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRztRQUNkLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRztRQUNkLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRztRQUNkLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRztRQUNkLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRztRQUNkLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRztLQUNmLENBQUM7SUFDRixJQUFJLFFBQVEsR0FDVixDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDO1NBQ2hFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbkQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNyQixNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFHbkcsTUFBTSxRQUFRLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU5RixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxJQUFZLEVBQUUsU0FBd0I7SUFDeEQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDNUcsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDM0csTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsTUFBTSxLQUFLLEdBQ1QsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQztTQUNoRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDL0MsSUFBSSxDQUFDLEVBQUUsQ0FBQztTQUNSLEtBQUssQ0FBQyxFQUFFLENBQUM7U0FDVCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMs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QWEsQ0FBQyxDQUFDLENBQUMsRUFDOUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQ3JEO0lBR0QsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxhQUFhLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFekYsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxhQUFhLENBQ2pDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUM5QyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFDaEQsaUJBQWlCLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQ3BELGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQ3pEO0lBRUQsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxhQUFhLENBQ2pDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUM5QyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFDaEQsaUJBQWlCLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQ3JEO0lBR0QsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxhQUFhLENBQ2pDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUM5QyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFDaEQsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxFQUFF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YUFBYSxDQUNqQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFDOUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQ2xELGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUNqRCxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FDckQ7SUFFRCxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLGFBQWEsQ0FDakMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQzlDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUNyRDtJQUdELENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksYUFBYSxDQUNqQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUF