@eleva-io/erp-sdk
Version:
SDK oficial para el ERP de Eleva
187 lines • 6.82 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.IBAN_COUNTRY_CODES = exports.IBAN_REGEX_PATTERNS = void 0;
exports.getIBANCountryCode = getIBANCountryCode;
exports.validateAccountNumberIBAN = validateAccountNumberIBAN;
const errors_1 = require("../../../../../errors");
const ibantools_1 = require("ibantools");
const invalid = (path, message) => errors_1.ElevaError.invalidField({
error: { validation: path, code: 'invalid_string', message, path: [path] },
});
// IBAN validation regex patterns by country
exports.IBAN_REGEX_PATTERNS = {
// Albania - 28 characters
AL: /^AL\d{2}\d{8}\d{16}$/,
// Andorra - 24 characters
AD: /^AD\d{2}\d{4}\d{4}\d{12}$/,
// Azerbaijan - 28 characters
AZ: /^AZ\d{2}[A-Z]{4}\d{20}$/,
// Bahrain - 22 characters
BH: /^BH\d{2}[A-Z]{4}\d{14}$/,
// Belgium - 16 characters
BE: /^BE\d{2}\d{3}\d{7}\d{2}$/,
// Bosnia and Herzegovina - 20 characters
BA: /^BA\d{2}\d{3}\d{3}\d{8}\d{2}$/,
// Brazil - 29 characters
BR: /^BR\d{2}\d{8}\d{5}\d{10}[A-Z]{1}[A-Z0-9]{1}$/,
// British Virgin Islands - 24 characters
VG: /^VG\d{2}[A-Z]{4}\d{16}$/,
// Bulgaria - 22 characters
BG: /^BG\d{2}[A-Z]{4}\d{4}\d{2}\d{8}$/,
// Costa Rica - 22 characters
CR: /^CR\d{2}\d{4}\d{14}$/,
// Denmark - 18 characters
DK: /^DK\d{2}\d{4}\d{9}\d{1}$/,
// Germany - 22 characters
DE: /^DE\d{2}\d{8}\d{10}$/,
// Dominican Republic - 28 characters
DO: /^DO\d{2}[A-Z]{4}\d{20}$/,
// El Salvador - 28 characters
SV: /^SV\d{2}[A-Z]{4}\d{20}$/,
// Estonia - 20 characters
EE: /^EE\d{2}\d{2}\d{2}\d{11}\d{1}$/,
// Faroe Islands - 18 characters
FO: /^FO\d{2}\d{4}\d{9}\d{1}$/,
// Finland - 18 characters
FI: /^FI\d{2}\d{6}\d{7}\d{1}$/,
// France - 27 characters
FR: /^FR\d{2}\d{5}\d{5}\d{11}\d{2}$/,
// Georgia - 22 characters
GE: /^GE\d{2}[A-Z]{2}\d{16}$/,
// Gibraltar - 23 characters
GI: /^GI\d{2}[A-Z]{4}\d{15}$/,
// Greece - 27 characters
GR: /^GR\d{2}\d{3}\d{4}\d{16}$/,
// Greenland - 18 characters
GL: /^GL\d{2}\d{4}\d{9}\d{1}$/,
// Great Britain (UK) - 22 characters
GB: /^GB\d{2}[A-Z]{4}\d{6}\d{8}$/,
// Guatemala - 28 characters
GT: /^GT\d{2}[A-Z]{4}\d{20}$/,
// Iraq - 23 characters
IQ: /^IQ\d{2}[A-Z]{4}\d{3}\d{12}$/,
// Ireland - 22 characters
IE: /^IE\d{2}[A-Z]{4}\d{6}\d{8}$/,
// Iceland - 26 characters
IS: /^IS\d{2}\d{4}\d{2}\d{6}\d{10}$/,
// Israel - 23 characters
IL: /^IL\d{2}\d{3}\d{3}\d{13}$/,
// Italy - 27 characters
IT: /^IT\d{2}[A-Z]{1}\d{5}\d{5}\d{12}$/,
// Jordan - 30 characters
JO: /^JO\d{2}[A-Z]{4}\d{4}\d{18}$/,
// Kazakhstan - 20 characters
KZ: /^KZ\d{2}\d{3}[A-Z]{13}$/,
// Qatar - 29 characters
QA: /^QA\d{2}[A-Z]{4}\d{21}$/,
// Kosovo - 20 characters
XK: /^XK\d{2}\d{4}\d{10}\d{2}$/,
// Croatia - 21 characters
HR: /^HR\d{2}\d{7}\d{10}$/,
// Kuwait - 30 characters
KW: /^KW\d{2}[A-Z]{4}\d{22}$/,
// Latvia - 21 characters
LV: /^LV\d{2}[A-Z]{4}\d{13}$/,
// Lebanon - 28 characters
LB: /^LB\d{2}\d{4}\d{20}$/,
// Liechtenstein - 21 characters
LI: /^LI\d{2}\d{5}\d{12}$/,
// Lithuania - 20 characters
LT: /^LT\d{2}\d{5}\d{11}$/,
// Luxembourg - 20 characters
LU: /^LU\d{2}\d{3}\d{13}$/,
// Malta - 31 characters
MT: /^MT\d{2}[A-Z]{4}\d{5}\d{18}$/,
// Mauritania - 27 characters
MR: /^MR\d{2}\d{5}\d{5}\d{11}\d{2}$/,
// Mauritius - 30 characters
MU: /^MU\d{2}[A-Z]{4}\d{2}\d{2}\d{12}\d{3}[A-Z]{3}$/,
// North Macedonia - 19 characters
MK: /^MK\d{2}\d{3}\d{10}\d{2}$/,
// Moldova - 24 characters
MD: /^MD\d{2}[A-Z]{2}\d{18}$/,
// Monaco - 27 characters
MC: /^MC\d{2}\d{5}\d{5}\d{11}\d{2}$/,
// Montenegro - 22 characters
ME: /^ME\d{2}\d{3}\d{13}\d{2}$/,
// Netherlands - 18 characters
NL: /^NL\d{2}[A-Z]{4}\d{10}$/,
// Norway - 15 characters
NO: /^NO\d{2}\d{4}\d{6}\d{1}$/,
// Austria - 20 characters
AT: /^AT\d{2}\d{5}\d{11}$/,
// Pakistan - 24 characters
PK: /^PK\d{2}[A-Z]{4}\d{16}$/,
// Palestine - 29 characters
PS: /^PS\d{2}[A-Z]{4}\d{21}$/,
// Poland - 28 characters
PL: /^PL\d{2}\d{8}\d{16}$/,
// Portugal - 25 characters
PT: /^PT\d{2}\d{4}\d{4}\d{11}\d{2}$/,
// Romania - 24 characters
RO: /^RO\d{2}[A-Z]{4}\d{16}$/,
// Saint Lucia - 32 characters
LC: /^LC\d{2}[A-Z]{4}\d{24}$/,
// San Marino - 27 characters
SM: /^SM\d{2}[A-Z]{1}\d{5}\d{5}\d{12}$/,
// Sao Tome and Principe - 25 characters
ST: /^ST\d{2}\d{4}\d{4}\d{11}\d{2}$/,
// Saudi Arabia - 24 characters
SA: /^SA\d{2}\d{2}\d{18}$/,
// Sweden - 24 characters
SE: /^SE\d{2}\d{3}\d{16}\d{1}$/,
// Switzerland - 21 characters
CH: /^CH\d{2}\d{5}\d{12}$/,
// Serbia - 22 characters
RS: /^RS\d{2}\d{3}\d{13}\d{2}$/,
// Seychelles - 31 characters
SC: /^SC\d{2}[A-Z]{4}\d{2}\d{2}\d{16}[A-Z]{3}$/,
// Slovak Republic - 24 characters
SK: /^SK\d{2}\d{4}\d{6}\d{10}$/,
// Slovenia - 19 characters
SI: /^SI\d{2}\d{5}\d{8}\d{2}$/,
// Spain - 24 characters
ES: /^ES\d{2}\d{4}\d{4}\d{1}\d{1}\d{10}$/,
// Timor-Leste - 23 characters
TL: /^TL\d{2}\d{3}\d{14}\d{2}$/,
// Turkey - 26 characters
TR: /^TR\d{2}\d{5}[A-Z0-9]{1}\d{16}$/,
// Czech Republic - 24 characters
CZ: /^CZ\d{2}\d{4}\d{6}\d{10}$/,
// Tunisia - 24 characters
TN: /^TN\d{2}\d{2}\d{3}\d{13}\d{2}$/,
// Ukraine - 29 characters
UA: /^UA\d{2}\d{6}\d{19}$/,
// Hungary - 28 characters
HU: /^HU\d{2}\d{3}\d{4}\d{1}\d{15}\d{1}$/,
// United Arab Emirates - 23 characters
AE: /^AE\d{2}\d{3}\d{16}$/,
// Belarus - 28 characters
BY: /^BY\d{2}[A-Z0-9]{4}\d{4}\d{16}$/,
// Cyprus - 28 characters
CY: /^CY\d{2}\d{3}\d{5}\d{16}$/,
};
exports.IBAN_COUNTRY_CODES = Object.keys(exports.IBAN_REGEX_PATTERNS);
function getIBANCountryCode(iban) {
const cleanIBAN = iban.replace(/\s/g, '').toUpperCase();
return cleanIBAN.substring(0, 2);
}
// Validation function
function validateAccountNumberIBAN(iban, path) {
if (!iban || typeof iban !== 'string') {
throw invalid(path, 'IBAN must be a string');
}
// Remove spaces and convert to uppercase
const cleanIBAN = iban.replace(/\s/g, '').toUpperCase();
// Extract country code
const countryCode = cleanIBAN.substring(0, 2);
// Check if country is supported
if (!exports.IBAN_REGEX_PATTERNS[countryCode]) {
throw invalid(path, `Unsupported country code: ${countryCode}`);
}
const { valid } = (0, ibantools_1.validateIBAN)(cleanIBAN);
if (!valid) {
throw invalid(path, `Invalid IBAN format for ${countryCode}`);
}
}
//# sourceMappingURL=iban.js.map