| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 | "use strict";Object.defineProperty(exports, "__esModule", {  value: true});exports.default = isIBAN;exports.locales = void 0;var _assertString = _interopRequireDefault(require("./util/assertString"));function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }/** * List of country codes with * corresponding IBAN regular expression * Reference: https://en.wikipedia.org/wiki/International_Bank_Account_Number */var ibanRegexThroughCountryCode = {  AD: /^(AD[0-9]{2})\d{8}[A-Z0-9]{12}$/,  AE: /^(AE[0-9]{2})\d{3}\d{16}$/,  AL: /^(AL[0-9]{2})\d{8}[A-Z0-9]{16}$/,  AT: /^(AT[0-9]{2})\d{16}$/,  AZ: /^(AZ[0-9]{2})[A-Z0-9]{4}\d{20}$/,  BA: /^(BA[0-9]{2})\d{16}$/,  BE: /^(BE[0-9]{2})\d{12}$/,  BG: /^(BG[0-9]{2})[A-Z]{4}\d{6}[A-Z0-9]{8}$/,  BH: /^(BH[0-9]{2})[A-Z]{4}[A-Z0-9]{14}$/,  BR: /^(BR[0-9]{2})\d{23}[A-Z]{1}[A-Z0-9]{1}$/,  BY: /^(BY[0-9]{2})[A-Z0-9]{4}\d{20}$/,  CH: /^(CH[0-9]{2})\d{5}[A-Z0-9]{12}$/,  CR: /^(CR[0-9]{2})\d{18}$/,  CY: /^(CY[0-9]{2})\d{8}[A-Z0-9]{16}$/,  CZ: /^(CZ[0-9]{2})\d{20}$/,  DE: /^(DE[0-9]{2})\d{18}$/,  DK: /^(DK[0-9]{2})\d{14}$/,  DO: /^(DO[0-9]{2})[A-Z]{4}\d{20}$/,  DZ: /^(DZ\d{24})$/,  EE: /^(EE[0-9]{2})\d{16}$/,  EG: /^(EG[0-9]{2})\d{25}$/,  ES: /^(ES[0-9]{2})\d{20}$/,  FI: /^(FI[0-9]{2})\d{14}$/,  FO: /^(FO[0-9]{2})\d{14}$/,  FR: /^(FR[0-9]{2})\d{10}[A-Z0-9]{11}\d{2}$/,  GB: /^(GB[0-9]{2})[A-Z]{4}\d{14}$/,  GE: /^(GE[0-9]{2})[A-Z0-9]{2}\d{16}$/,  GI: /^(GI[0-9]{2})[A-Z]{4}[A-Z0-9]{15}$/,  GL: /^(GL[0-9]{2})\d{14}$/,  GR: /^(GR[0-9]{2})\d{7}[A-Z0-9]{16}$/,  GT: /^(GT[0-9]{2})[A-Z0-9]{4}[A-Z0-9]{20}$/,  HR: /^(HR[0-9]{2})\d{17}$/,  HU: /^(HU[0-9]{2})\d{24}$/,  IE: /^(IE[0-9]{2})[A-Z0-9]{4}\d{14}$/,  IL: /^(IL[0-9]{2})\d{19}$/,  IQ: /^(IQ[0-9]{2})[A-Z]{4}\d{15}$/,  IR: /^(IR[0-9]{2})0\d{2}0\d{18}$/,  IS: /^(IS[0-9]{2})\d{22}$/,  IT: /^(IT[0-9]{2})[A-Z]{1}\d{10}[A-Z0-9]{12}$/,  JO: /^(JO[0-9]{2})[A-Z]{4}\d{22}$/,  KW: /^(KW[0-9]{2})[A-Z]{4}[A-Z0-9]{22}$/,  KZ: /^(KZ[0-9]{2})\d{3}[A-Z0-9]{13}$/,  LB: /^(LB[0-9]{2})\d{4}[A-Z0-9]{20}$/,  LC: /^(LC[0-9]{2})[A-Z]{4}[A-Z0-9]{24}$/,  LI: /^(LI[0-9]{2})\d{5}[A-Z0-9]{12}$/,  LT: /^(LT[0-9]{2})\d{16}$/,  LU: /^(LU[0-9]{2})\d{3}[A-Z0-9]{13}$/,  LV: /^(LV[0-9]{2})[A-Z]{4}[A-Z0-9]{13}$/,  MA: /^(MA[0-9]{26})$/,  MC: /^(MC[0-9]{2})\d{10}[A-Z0-9]{11}\d{2}$/,  MD: /^(MD[0-9]{2})[A-Z0-9]{20}$/,  ME: /^(ME[0-9]{2})\d{18}$/,  MK: /^(MK[0-9]{2})\d{3}[A-Z0-9]{10}\d{2}$/,  MR: /^(MR[0-9]{2})\d{23}$/,  MT: /^(MT[0-9]{2})[A-Z]{4}\d{5}[A-Z0-9]{18}$/,  MU: /^(MU[0-9]{2})[A-Z]{4}\d{19}[A-Z]{3}$/,  MZ: /^(MZ[0-9]{2})\d{21}$/,  NL: /^(NL[0-9]{2})[A-Z]{4}\d{10}$/,  NO: /^(NO[0-9]{2})\d{11}$/,  PK: /^(PK[0-9]{2})[A-Z0-9]{4}\d{16}$/,  PL: /^(PL[0-9]{2})\d{24}$/,  PS: /^(PS[0-9]{2})[A-Z0-9]{4}\d{21}$/,  PT: /^(PT[0-9]{2})\d{21}$/,  QA: /^(QA[0-9]{2})[A-Z]{4}[A-Z0-9]{21}$/,  RO: /^(RO[0-9]{2})[A-Z]{4}[A-Z0-9]{16}$/,  RS: /^(RS[0-9]{2})\d{18}$/,  SA: /^(SA[0-9]{2})\d{2}[A-Z0-9]{18}$/,  SC: /^(SC[0-9]{2})[A-Z]{4}\d{20}[A-Z]{3}$/,  SE: /^(SE[0-9]{2})\d{20}$/,  SI: /^(SI[0-9]{2})\d{15}$/,  SK: /^(SK[0-9]{2})\d{20}$/,  SM: /^(SM[0-9]{2})[A-Z]{1}\d{10}[A-Z0-9]{12}$/,  SV: /^(SV[0-9]{2})[A-Z0-9]{4}\d{20}$/,  TL: /^(TL[0-9]{2})\d{19}$/,  TN: /^(TN[0-9]{2})\d{20}$/,  TR: /^(TR[0-9]{2})\d{5}[A-Z0-9]{17}$/,  UA: /^(UA[0-9]{2})\d{6}[A-Z0-9]{19}$/,  VA: /^(VA[0-9]{2})\d{18}$/,  VG: /^(VG[0-9]{2})[A-Z0-9]{4}\d{16}$/,  XK: /^(XK[0-9]{2})\d{16}$/};/** * Check if the country codes passed are valid using the * ibanRegexThroughCountryCode as a reference * * @param {array} countryCodeArray * @return {boolean} */function hasOnlyValidCountryCodes(countryCodeArray) {  var countryCodeArrayFilteredWithObjectIbanCode = countryCodeArray.filter(function (countryCode) {    return !(countryCode in ibanRegexThroughCountryCode);  });  if (countryCodeArrayFilteredWithObjectIbanCode.length > 0) {    return false;  }  return true;}/** * Check whether string has correct universal IBAN format * The IBAN consists of up to 34 alphanumeric characters, as follows: * Country Code using ISO 3166-1 alpha-2, two letters * check digits, two digits and * Basic Bank Account Number (BBAN), up to 30 alphanumeric characters. * NOTE: Permitted IBAN characters are: digits [0-9] and the 26 latin alphabetic [A-Z] * * @param {string} str - string under validation * @param {object} options - object to pass the countries to be either whitelisted or blacklisted * @return {boolean} */function hasValidIbanFormat(str, options) {  // Strip white spaces and hyphens  var strippedStr = str.replace(/[\s\-]+/gi, '').toUpperCase();  var isoCountryCode = strippedStr.slice(0, 2).toUpperCase();  var isoCountryCodeInIbanRegexCodeObject = (isoCountryCode in ibanRegexThroughCountryCode);  if (options.whitelist) {    if (!hasOnlyValidCountryCodes(options.whitelist)) {      return false;    }    var isoCountryCodeInWhiteList = options.whitelist.includes(isoCountryCode);    if (!isoCountryCodeInWhiteList) {      return false;    }  }  if (options.blacklist) {    var isoCountryCodeInBlackList = options.blacklist.includes(isoCountryCode);    if (isoCountryCodeInBlackList) {      return false;    }  }  return isoCountryCodeInIbanRegexCodeObject && ibanRegexThroughCountryCode[isoCountryCode].test(strippedStr);}/**   * Check whether string has valid IBAN Checksum   * by performing basic mod-97 operation and   * the remainder should equal 1   * -- Start by rearranging the IBAN by moving the four initial characters to the end of the string   * -- Replace each letter in the string with two digits, A -> 10, B = 11, Z = 35   * -- Interpret the string as a decimal integer and   * -- compute the remainder on division by 97 (mod 97)   * Reference: https://en.wikipedia.org/wiki/International_Bank_Account_Number   *   * @param {string} str   * @return {boolean}   */function hasValidIbanChecksum(str) {  var strippedStr = str.replace(/[^A-Z0-9]+/gi, '').toUpperCase(); // Keep only digits and A-Z latin alphabetic  var rearranged = strippedStr.slice(4) + strippedStr.slice(0, 4);  var alphaCapsReplacedWithDigits = rearranged.replace(/[A-Z]/g, function (char) {    return char.charCodeAt(0) - 55;  });  var remainder = alphaCapsReplacedWithDigits.match(/\d{1,7}/g).reduce(function (acc, value) {    return Number(acc + value) % 97;  }, '');  return remainder === 1;}function isIBAN(str) {  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};  (0, _assertString.default)(str);  return hasValidIbanFormat(str, options) && hasValidIbanChecksum(str);}var locales = exports.locales = Object.keys(ibanRegexThroughCountryCode);
 |