UNPKG

@eleva-io/erp-sdk

Version:

SDK oficial para el ERP de Eleva

187 lines 6.82 kB
"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