UNPKG

vue-card-payment

Version:
1,895 lines (1,736 loc) 128 kB
/*! * vue-card-payment v0.2.1 * (c) 2019 Vladimir Pavlov * Released under the MIT License. */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); /* * Luhn algorithm implementation in JavaScript * Copyright (c) 2009 Nicholas C. Zakas * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ function luhn10(identifier) { var sum = 0; var alt = false; var i = identifier.length - 1; var num; while (i >= 0) { num = parseInt(identifier.charAt(i), 10); if (alt) { num *= 2; if (num > 9) { num = (num % 10) + 1; // eslint-disable-line no-extra-parens } } alt = !alt; sum += num; i--; } return sum % 10 === 0; } var luhn10_1 = luhn10; var testOrder; var types = {}; var customCards = {}; var VISA = 'visa'; var MASTERCARD = 'mastercard'; var AMERICAN_EXPRESS = 'american-express'; var DINERS_CLUB = 'diners-club'; var DISCOVER = 'discover'; var JCB = 'jcb'; var UNIONPAY = 'unionpay'; var MAESTRO = 'maestro'; var MIR = 'mir'; var CVV = 'CVV'; var CID = 'CID'; var CVC = 'CVC'; var CVN = 'CVN'; var CVP2 = 'CVP2'; var ORIGINAL_TEST_ORDER = [ VISA, MASTERCARD, AMERICAN_EXPRESS, DINERS_CLUB, DISCOVER, JCB, UNIONPAY, MAESTRO, MIR ]; function clone(originalObject) { var dupe; if (!originalObject) { return null; } dupe = JSON.parse(JSON.stringify(originalObject)); delete dupe.prefixPattern; delete dupe.exactPattern; return dupe; } testOrder = clone(ORIGINAL_TEST_ORDER); types[VISA] = { niceType: 'Visa', type: VISA, prefixPattern: /^4$/, exactPattern: /^4\d*$/, gaps: [4, 8, 12], lengths: [16, 18, 19], code: { name: CVV, size: 3 } }; types[MASTERCARD] = { niceType: 'Mastercard', type: MASTERCARD, prefixPattern: /^(5|5[1-5]|2|22|222|222[1-9]|2[3-6]|27|27[0-2]|2720)$/, exactPattern: /^(5[1-5]|222[1-9]|22[3-9]|2[3-6]|27[0-1]|2720)\d*$/, gaps: [4, 8, 12], lengths: [16], code: { name: CVC, size: 3 } }; types[AMERICAN_EXPRESS] = { niceType: 'American Express', type: AMERICAN_EXPRESS, prefixPattern: /^(3|34|37)$/, exactPattern: /^3[47]\d*$/, isAmex: true, gaps: [4, 10], lengths: [15], code: { name: CID, size: 4 } }; types[DINERS_CLUB] = { niceType: 'Diners Club', type: DINERS_CLUB, prefixPattern: /^(3|3[0689]|30[0-5])$/, exactPattern: /^3(0[0-5]|[689])\d*$/, gaps: [4, 10], lengths: [14, 16, 19], code: { name: CVV, size: 3 } }; types[DISCOVER] = { niceType: 'Discover', type: DISCOVER, prefixPattern: /^(6|60|601|6011|65|64|64[4-9])$/, exactPattern: /^(6011|65|64[4-9])\d*$/, gaps: [4, 8, 12], lengths: [16, 19], code: { name: CID, size: 3 } }; types[JCB] = { niceType: 'JCB', type: JCB, prefixPattern: /^(2|21|213|2131|1|18|180|1800|3|35)$/, exactPattern: /^(2131|1800|35)\d*$/, gaps: [4, 8, 12], lengths: [16, 17, 18, 19], code: { name: CVV, size: 3 } }; types[UNIONPAY] = { niceType: 'UnionPay', type: UNIONPAY, prefixPattern: /^((6|62|62\d|(621(?!83|88|98|99))|622(?!06)|627[02,06,07]|628(?!0|1)|629[1,2])|622018)$/, exactPattern: /^(((620|(621(?!83|88|98|99))|622(?!06|018)|62[3-6]|627[02,06,07]|628(?!0|1)|629[1,2]))\d*|622018\d{12})$/, gaps: [4, 8, 12], lengths: [16, 17, 18, 19], code: { name: CVN, size: 3 } }; types[MAESTRO] = { niceType: 'Maestro', type: MAESTRO, prefixPattern: /^(5|5[06-9]|6\d*)$/, exactPattern: /^(5[06-9]|6[37])\d*$/, gaps: [4, 8, 12], lengths: [12, 13, 14, 15, 16, 17, 18, 19], code: { name: CVC, size: 3 } }; types[MIR] = { niceType: 'Mir', type: MIR, prefixPattern: /^(2|22|220|220[0-4])$/, exactPattern: /^(220[0-4])\d*$/, gaps: [4, 8, 12], lengths: [16, 17, 18, 19], code: { name: CVP2, size: 3 } }; function findType(type) { return customCards[type] || types[type]; } function creditCardType(cardNumber) { var type, value, i; var prefixResults = []; var exactResults = []; if (!(typeof cardNumber === 'string' || cardNumber instanceof String)) { return []; } for (i = 0; i < testOrder.length; i++) { type = testOrder[i]; value = findType(type); if (cardNumber.length === 0) { prefixResults.push(clone(value)); continue; } if (value.exactPattern.test(cardNumber)) { exactResults.push(clone(value)); } else if (value.prefixPattern.test(cardNumber)) { prefixResults.push(clone(value)); } } return exactResults.length ? exactResults : prefixResults; } creditCardType.getTypeInfo = function (type) { return clone(findType(type)); }; function getCardPosition(name, ignoreErrorForNotExisting) { var position = testOrder.indexOf(name); if (!ignoreErrorForNotExisting && position === -1) { throw new Error('"' + name + '" is not a supported card type.'); } return position; } creditCardType.removeCard = function (name) { var position = getCardPosition(name); testOrder.splice(position, 1); }; creditCardType.addCard = function (config) { var existingCardPosition = getCardPosition(config.type, true); customCards[config.type] = config; if (existingCardPosition === -1) { testOrder.push(config.type); } }; creditCardType.changeOrder = function (name, position) { var currentPosition = getCardPosition(name); testOrder.splice(currentPosition, 1); testOrder.splice(position, 0, name); }; creditCardType.resetModifications = function () { testOrder = clone(ORIGINAL_TEST_ORDER); customCards = {}; }; creditCardType.types = { VISA: VISA, MASTERCARD: MASTERCARD, AMERICAN_EXPRESS: AMERICAN_EXPRESS, DINERS_CLUB: DINERS_CLUB, DISCOVER: DISCOVER, JCB: JCB, UNIONPAY: UNIONPAY, MAESTRO: MAESTRO, MIR: MIR }; var creditCardType_1 = creditCardType; function verification(card, isPotentiallyValid, isValid) { return {card: card, isPotentiallyValid: isPotentiallyValid, isValid: isValid}; } function cardNumber(value) { var potentialTypes, cardType, isPotentiallyValid, isValid, i, maxLength; if (typeof value === 'number') { value = String(value); } if (typeof value !== 'string') { return verification(null, false, false); } value = value.replace(/\-|\s/g, ''); if (!/^\d*$/.test(value)) { return verification(null, false, false); } potentialTypes = creditCardType_1(value); if (potentialTypes.length === 0) { return verification(null, false, false); } else if (potentialTypes.length !== 1) { return verification(null, true, false); } cardType = potentialTypes[0]; if (cardType.type === 'unionpay') { // UnionPay is not Luhn 10 compliant isValid = true; } else { isValid = luhn10_1(value); } maxLength = Math.max.apply(null, cardType.lengths); for (i = 0; i < cardType.lengths.length; i++) { if (cardType.lengths[i] === value.length) { isPotentiallyValid = value.length !== maxLength || isValid; return verification(cardType, isPotentiallyValid, isValid); } } return verification(cardType, value.length < maxLength, false); } var cardNumber_1 = cardNumber; var DEFAULT_VALID_NUMBER_OF_YEARS_IN_THE_FUTURE = 19; function verification$2(isValid, isPotentiallyValid, isCurrentYear) { return { isValid: isValid, isPotentiallyValid: isPotentiallyValid, isCurrentYear: isCurrentYear || false }; } function expirationYear(value, maxElapsedYear) { var currentFirstTwo, currentYear, firstTwo, len, twoDigitYear, valid, isCurrentYear; maxElapsedYear = maxElapsedYear || DEFAULT_VALID_NUMBER_OF_YEARS_IN_THE_FUTURE; if (typeof value !== 'string') { return verification$2(false, false); } if (value.replace(/\s/g, '') === '') { return verification$2(false, true); } if (!/^\d*$/.test(value)) { return verification$2(false, false); } len = value.length; if (len < 2) { return verification$2(false, true); } currentYear = new Date().getFullYear(); if (len === 3) { // 20x === 20x firstTwo = value.slice(0, 2); currentFirstTwo = String(currentYear).slice(0, 2); return verification$2(false, firstTwo === currentFirstTwo); } if (len > 4) { return verification$2(false, false); } value = parseInt(value, 10); twoDigitYear = Number(String(currentYear).substr(2, 2)); if (len === 2) { isCurrentYear = twoDigitYear === value; valid = value >= twoDigitYear && value <= twoDigitYear + maxElapsedYear; } else if (len === 4) { isCurrentYear = currentYear === value; valid = value >= currentYear && value <= currentYear + maxElapsedYear; } return verification$2(valid, valid, isCurrentYear); } var expirationYear_1 = expirationYear; // Polyfill taken from <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray#Polyfill>. var isArray = Array.isArray || function (arg) { return Object.prototype.toString.call(arg) === '[object Array]'; }; function parseDate(value) { var month, len, year, yearValid; if (/\//.test(value)) { value = value.split(/\s*\/\s*/g); } else if (/\s/.test(value)) { value = value.split(/ +/g); } if (isArray(value)) { return { month: value[0], year: value.slice(1).join() }; } len = value[0] === '0' || value.length > 5 ? 2 : 1; if (value[0] === '1') { year = value.substr(1); yearValid = expirationYear_1(year); if (!yearValid.isPotentiallyValid) { len = 2; } } month = value.substr(0, len); return { month: month, year: value.substr(month.length) }; } var parseDate_1 = parseDate; function verification$3(isValid, isPotentiallyValid, isValidForThisYear) { return { isValid: isValid, isPotentiallyValid: isPotentiallyValid, isValidForThisYear: isValidForThisYear || false }; } function expirationMonth(value) { var month, result; var currentMonth = new Date().getMonth() + 1; if (typeof value !== 'string') { return verification$3(false, false); } if (value.replace(/\s/g, '') === '' || value === '0') { return verification$3(false, true); } if (!/^\d*$/.test(value)) { return verification$3(false, false); } month = parseInt(value, 10); if (isNaN(value)) { return verification$3(false, false); } result = month > 0 && month < 13; return verification$3(result, result, result && month >= currentMonth); } var expirationMonth_1 = expirationMonth; function verification$1(isValid, isPotentiallyValid, month, year) { return { isValid: isValid, isPotentiallyValid: isPotentiallyValid, month: month, year: year }; } function expirationDate(value, maxElapsedYear) { var date, monthValid, yearValid, isValidForThisYear; if (typeof value === 'string') { value = value.replace(/^(\d\d) (\d\d(\d\d)?)$/, '$1/$2'); date = parseDate_1(value); } else if (value !== null && typeof value === 'object') { date = { month: String(value.month), year: String(value.year) }; } else { return verification$1(false, false, null, null); } monthValid = expirationMonth_1(date.month); yearValid = expirationYear_1(date.year, maxElapsedYear); if (monthValid.isValid) { if (yearValid.isCurrentYear) { isValidForThisYear = monthValid.isValidForThisYear; return verification$1(isValidForThisYear, isValidForThisYear, date.month, date.year); } if (yearValid.isValid) { return verification$1(true, true, date.month, date.year); } } if (monthValid.isPotentiallyValid && yearValid.isPotentiallyValid) { return verification$1(false, true, null, null); } return verification$1(false, false, null, null); } var expirationDate_1 = expirationDate; var DEFAULT_LENGTH = 3; function includes(array, thing) { var i = 0; for (; i < array.length; i++) { if (thing === array[i]) { return true; } } return false; } function max(array) { var maximum = DEFAULT_LENGTH; var i = 0; for (; i < array.length; i++) { maximum = array[i] > maximum ? array[i] : maximum; } return maximum; } function verification$4(isValid, isPotentiallyValid) { return {isValid: isValid, isPotentiallyValid: isPotentiallyValid}; } function cvv(value, maxLength) { maxLength = maxLength || DEFAULT_LENGTH; maxLength = maxLength instanceof Array ? maxLength : [maxLength]; if (typeof value !== 'string') { return verification$4(false, false); } if (!/^\d*$/.test(value)) { return verification$4(false, false); } if (includes(maxLength, value.length)) { return verification$4(true, true); } if (value.length < Math.min.apply(null, maxLength)) { return verification$4(false, true); } if (value.length > max(maxLength)) { return verification$4(false, false); } return verification$4(true, true); } var cvv_1 = cvv; var DEFAULT_MIN_POSTAL_CODE_LENGTH = 3; function verification$5(isValid, isPotentiallyValid) { return {isValid: isValid, isPotentiallyValid: isPotentiallyValid}; } function postalCode(value, options) { var minLength; options = options || {}; minLength = options.minLength || DEFAULT_MIN_POSTAL_CODE_LENGTH; if (typeof value !== 'string') { return verification$5(false, false); } else if (value.length < minLength) { return verification$5(false, true); } return verification$5(true, true); } var postalCode_1 = postalCode; var cardValidator = { number: cardNumber_1, expirationDate: expirationDate_1, expirationMonth: expirationMonth_1, expirationYear: expirationYear_1, cvv: cvv_1, postalCode: postalCode_1, creditCardType: creditCardType_1 }; var cardValidator_1 = cardValidator.number; var cardValidator_3 = cardValidator.expirationMonth; var cardValidator_4 = cardValidator.expirationYear; var cardValidator_5 = cardValidator.cvv; function createCommonjsModule(fn, module) { return module = { exports: {} }, fn(module, module.exports), module.exports; } var cardInfo = createCommonjsModule(function (module, exports) { /* * card-info v1.2.4 * Get bank logo, colors, brand and etc. by card number * https://github.com/iserdmi/card-info.git * by Sergey Dmitriev (http://srdm.io) */ (function () { function CardInfo (numberSource, options) { CardInfo._assign(this, CardInfo._defaultProps); this.options = CardInfo._assign({}, CardInfo.defaultOptions, options || {}); this.numberSource = arguments.length ? numberSource : ''; this.number = CardInfo._getNumber(this.numberSource); var bankData = CardInfo._getBank(this.number); if (bankData) { this.bankAlias = bankData.alias; this.bankName = bankData.name; this.bankNameEn = bankData.nameEn; this.bankCountry = bankData.country; this.bankUrl = bankData.url; this.bankLogoPng = CardInfo._getLogo(this.options.banksLogosPath, bankData.logoPng); this.bankLogoSvg = CardInfo._getLogo(this.options.banksLogosPath, bankData.logoSvg); this.bankLogo = CardInfo._getLogoByPreferredExt(this.bankLogoPng, this.bankLogoSvg, this.options.preferredExt); this.bankLogoStyle = bankData.logoStyle; this.backgroundColor = bankData.backgroundColor; this.backgroundColors = bankData.backgroundColors; this.backgroundLightness = bankData.backgroundLightness; this.textColor = bankData.text; } this.backgroundGradient = CardInfo._getGradient(this.backgroundColors, this.options.gradientDegrees); var brandData = CardInfo._getBrand(this.number); if (brandData) { this.brandAlias = brandData.alias; this.brandName = brandData.name; var brandLogoBasename = CardInfo._getBrandLogoBasename(this.brandAlias, this.options.brandLogoPolicy, this.backgroundLightness, this.bankLogoStyle); this.brandLogoPng = CardInfo._getLogo(this.options.brandsLogosPath, brandLogoBasename, 'png'); this.brandLogoSvg = CardInfo._getLogo(this.options.brandsLogosPath, brandLogoBasename, 'svg'); this.brandLogo = CardInfo._getLogoByPreferredExt(this.brandLogoPng, this.brandLogoSvg, this.options.preferredExt); this.codeName = brandData.codeName; this.codeLength = brandData.codeLength; this.numberLengths = brandData.lengths; this.numberGaps = brandData.gaps; } this.numberBlocks = CardInfo._getBlocks(this.numberGaps, this.numberLengths); this.numberMask = CardInfo._getMask(this.options.maskDigitSymbol, this.options.maskDelimiterSymbol, this.numberBlocks); this.numberNice = CardInfo._getNumberNice(this.number, this.numberGaps); } CardInfo._defaultProps = { bankAlias: null, bankName: null, bankNameEn: null, bankCountry: null, bankUrl: null, bankLogo: null, bankLogoPng: null, bankLogoSvg: null, bankLogoStyle: null, backgroundColor: '#eeeeee', backgroundColors: ['#eeeeee', '#dddddd'], backgroundLightness: 'light', backgroundGradient: null, textColor: '#000', brandAlias: null, brandName: null, brandLogo: null, brandLogoPng: null, brandLogoSvg: null, codeName: null, codeLength: null, numberMask: null, numberGaps: [4, 8, 12], numberBlocks: null, numberLengths: [12, 13, 14, 15, 16, 17, 18, 19], numberNice: null, number: null, numberSource: null, options: {} }; CardInfo.defaultOptions = { banksLogosPath: '/bower_components/card-info/dist/banks-logos/', brandsLogosPath: '/bower_components/card-info/dist/brands-logos/', brandLogoPolicy: 'auto', preferredExt: 'svg', maskDigitSymbol: '0', maskDelimiterSymbol: ' ', gradientDegrees: 135 }; CardInfo._banks = {}; CardInfo._prefixes = {}; CardInfo._brands = [ { alias: 'visa', name: 'Visa', codeName: 'CVV', codeLength: 3, gaps: [4, 8, 12], lengths: [16], pattern: /^4\d*$/ }, { alias: 'master-card', name: 'MasterCard', codeName: 'CVC', codeLength: 3, gaps: [4, 8, 12], lengths: [16], pattern: /^(5[1-5]|222[1-9]|2[3-6]|27[0-1]|2720)\d*$/ }, { alias: 'american-express', name: 'American Express', codeName: 'CID', codeLength: 4, gaps: [4, 10], lengths: [15], pattern: /^3[47]\d*$/ }, { alias: 'diners-club', name: 'Diners Club', codeName: 'CVV', codeLength: 3, gaps: [4, 10], lengths: [14], pattern: /^3(0[0-5]|[689])\d*$/ }, { alias: 'discover', name: 'Discover', codeName: 'CID', codeLength: 3, gaps: [4, 8, 12], lengths: [16, 19], pattern: /^(6011|65|64[4-9])\d*$/ }, { alias: 'jcb', name: 'JCB', codeName: 'CVV', codeLength: 3, gaps: [4, 8, 12], lengths: [16], pattern: /^(2131|1800|35)\d*$/ }, { alias: 'unionpay', name: 'UnionPay', codeName: 'CVN', codeLength: 3, gaps: [4, 8, 12], lengths: [16, 17, 18, 19], pattern: /^62[0-5]\d*$/ }, { alias: 'maestro', name: 'Maestro', codeName: 'CVC', codeLength: 3, gaps: [4, 8, 12], lengths: [12, 13, 14, 15, 16, 17, 18, 19], pattern: /^(5[0678]|6304|6390|6054|6271|67)\d*$/ }, { alias: 'mir', name: 'MIR', codeName: 'CVC', codeLength: 3, gaps: [4, 8, 12], lengths: [16], pattern: /^22\d*$/ } ]; CardInfo._assign = function () { var arguments$1 = arguments; var objTarget = arguments[0]; for (var i = 1; i < arguments.length; i++) { var objSource = arguments$1[i]; for (var key in objSource) { if (objSource.hasOwnProperty(key)) { if (objSource[key] instanceof Array) { objTarget[key] = CardInfo._assign([], objSource[key]); } else { objTarget[key] = objSource[key]; } } } } return objTarget }; CardInfo._getNumber = function (numberSource) { var numberSourceString = numberSource + ''; return /^[\d ]*$/.test(numberSourceString) ? numberSourceString.replace(/\D/g, '') : '' }; CardInfo._getBank = function (number) { if (number.length < 6) { return undefined } var prefix = number.substr(0, 6); return this._prefixes[prefix] ? this._banks[this._prefixes[prefix]] : undefined }; CardInfo._getBrand = function (number) { var this$1 = this; var brands = []; for (var i = 0; i < this._brands.length; i++) { if (this$1._brands[i].pattern.test(number)) { brands.push(this$1._brands[i]); } } if (brands.length === 1) { return brands[0] } }; CardInfo._getLogo = function (dirname, basename, extname) { return basename ? dirname + (extname ? basename + '.' + extname : basename) : null }; CardInfo._getBrandLogoBasename = function (brandAlias, brandLogoPolicy, backgroundLightness, bankLogoStyle) { switch (brandLogoPolicy) { case 'auto': return brandAlias + '-' + (bankLogoStyle || 'colored') case 'colored': return brandAlias + '-colored' case 'mono': return brandAlias + (backgroundLightness === 'light' ? '-black' : '-white') case 'black': return brandAlias + '-black' case 'white': return brandAlias + '-white' } }; CardInfo._getLogoByPreferredExt = function (logoPng, logoSvg, preferredExt) { if (!logoPng && !logoSvg) { return null } if (!logoPng) { return logoSvg } if (!logoSvg) { return logoPng } return (logoPng.substr(logoPng.length - 3) === preferredExt) ? logoPng : logoSvg }; CardInfo._getGradient = function (backgroundColors, gradientDegrees) { return 'linear-gradient(' + gradientDegrees + 'deg, ' + backgroundColors.join(', ') + ')' }; CardInfo._getBlocks = function (numberGaps, numberLengths) { var numberLength = numberLengths[numberLengths.length - 1]; var blocks = []; for (var i = numberGaps.length - 1; i >= 0; i--) { var blockLength = numberLength - numberGaps[i]; numberLength -= blockLength; blocks.push(blockLength); } blocks.push(numberLength); return blocks.reverse() }; CardInfo._getMask = function (maskDigitSymbol, maskDelimiterSymbol, numberBlocks) { var mask = ''; for (var i = 0; i < numberBlocks.length; i++) { mask += (i ? maskDelimiterSymbol : '') + Array(numberBlocks[i] + 1).join(maskDigitSymbol); } return mask }; CardInfo._getNumberNice = function (number, numberGaps) { var offsets = [0].concat(numberGaps).concat([number.length]); var components = []; for (var i = 0; offsets[i] < number.length; i++) { var start = offsets[i]; var end = Math.min(offsets[i + 1], number.length); components.push(number.substring(start, end)); } return components.join(' ') }; CardInfo._addBanks = function (banks) { this._assign(this._banks, banks); }; CardInfo._addPrefixes = function (prefixes) { this._assign(this._prefixes, prefixes); }; CardInfo.addBanksAndPrefixes = function (banksAndPrefixes) { this._addBanks(banksAndPrefixes.banks); this._addPrefixes(banksAndPrefixes.prefixes); }; CardInfo.getBanks = function (options) { var this$1 = this; options = CardInfo._assign({}, CardInfo.defaultOptions, options || {}); var banks = []; var exts = ['png', 'svg']; var extsCapitalized = ['Png', 'Svg']; for (var bi in this$1._banks) { if (this$1._banks.hasOwnProperty(bi)) { var bank = CardInfo._assign({}, this$1._banks[bi]); for (var ei = 0; ei < exts.length; ei++) { var logoKey = 'logo' + extsCapitalized[ei]; if (bank[logoKey]) { bank[logoKey] = CardInfo._getLogo(options.banksLogosPath, bank[logoKey]); } } bank.backgroundGradient = CardInfo._getGradient(bank.backgroundColors, options.gradientDegrees); bank.logo = CardInfo._getLogoByPreferredExt(bank.logoPng, bank.logoSvg, options.preferredExt); banks.push(bank); } } return banks }; CardInfo.getBrands = function (options) { var this$1 = this; options = CardInfo._assign({}, CardInfo.defaultOptions, options || {}); var brands = []; var styles = ['colored', 'black', 'white']; var exts = ['png', 'svg']; var stylesCapitalized = ['Colored', 'Black', 'White']; var extsCapitalized = ['Png', 'Svg']; for (var bi = 0; bi < this._brands.length; bi++) { var brand = CardInfo._assign({}, this$1._brands[bi]); brand.blocks = CardInfo._getBlocks(brand.gaps, brand.lengths); brand.mask = CardInfo._getMask(options.maskDigitSymbol, options.maskDelimiterSymbol, brand.blocks); for (var si = 0; si < styles.length; si++) { var logoKey = 'logo' + stylesCapitalized[si]; for (var ei = 0; ei < exts.length; ei++) { brand[logoKey + extsCapitalized[ei]] = CardInfo._getLogo(options.brandsLogosPath, brand.alias + '-' + styles[si], exts[ei]); } brand[logoKey] = CardInfo._getLogoByPreferredExt(brand[logoKey + 'Png'], brand[logoKey + 'Svg'], options.preferredExt); } brands.push(brand); } return brands }; CardInfo.setDefaultOptions = function (options) { this._assign(CardInfo.defaultOptions, options); }; { if ('object' !== 'undefined' && module.exports) { exports = module.exports = CardInfo; } exports.CardInfo = CardInfo; } })() ;(function () { var banks = { "ru-absolut": { "name": "Абсолют Банк", "nameEn": "Absolut Bank", "url": "http://absolutbank.ru/", "backgroundColor": "#fdb89a", "backgroundColors": [ "#fbd6c5", "#fdb89a" ], "backgroundLightness": "light", "logoStyle": "colored", "text": "#676766", "alias": "ru-absolut", "country": "ru", "logoPng": "ru-absolut.png" }, "ru-akbars": { "name": "Ак Барс", "nameEn": "AK Bars", "url": "https://www.akbars.ru/", "backgroundColor": "#01973e", "backgroundColors": [ "#01973e", "#04632b" ], "backgroundLightness": "dark", "logoStyle": "white", "text": "#fff", "alias": "ru-akbars", "country": "ru", "logoPng": "ru-akbars.png" }, "ru-alfa": { "name": "Альфа-Банк", "nameEn": "Alfa-Bank", "url": "https://alfabank.ru/", "backgroundColor": "#ef3124", "backgroundColors": [ "#ef3124", "#d6180b" ], "backgroundLightness": "dark", "logoStyle": "white", "text": "#fff", "alias": "ru-alfa", "country": "ru", "logoPng": "ru-alfa.png", "logoSvg": "ru-alfa.svg" }, "ru-atb": { "name": "Азиатско-Тихоокеанский Банк", "nameEn": "Азиатско-Тихоокеанский Банк", "url": "https://www.atb.su/", "backgroundColor": "#eeeeee", "backgroundColors": [ "#eeeeee", "#dea184" ], "backgroundLightness": "light", "logoStyle": "colored", "text": "#373a36", "alias": "ru-atb", "country": "ru", "logoPng": "ru-atb.png", "logoSvg": "ru-atb.svg" }, "ru-avangard": { "name": "Авангард", "nameEn": "Avangard", "url": "https://www.avangard.ru/", "backgroundColor": "#095b34", "backgroundColors": [ "#0f8e52", "#095b34" ], "backgroundLightness": "dark", "logoStyle": "white", "text": "#fff", "alias": "ru-avangard", "country": "ru", "logoPng": "ru-avangard.png" }, "ru-binbank": { "name": "Бинбанк", "nameEn": "B&N Bank Public", "url": "https://www.binbank.ru/", "backgroundColor": "#cdeafd", "backgroundColors": [ "#cdeafd", "#9cc0d9" ], "backgroundLightness": "light", "logoStyle": "colored", "text": "#004c81", "alias": "ru-binbank", "country": "ru", "logoPng": "ru-binbank.png", "logoSvg": "ru-binbank.svg" }, "ru-ceb": { "name": "Кредит Европа Банк", "nameEn": "Credit Europe Bank", "url": "https://www.crediteurope.ru/", "backgroundColor": "#e0eaf7", "backgroundColors": [ "#e0eaf7", "#f7dfdf" ], "backgroundLightness": "light", "logoStyle": "colored", "text": "#1c297b", "alias": "ru-ceb", "country": "ru", "logoPng": "ru-ceb.png", "logoSvg": "ru-ceb.svg" }, "ru-cetelem": { "name": "Сетелем Банк", "nameEn": "Cetelem Bank", "url": "https://www.cetelem.ru/", "backgroundColor": "#ceecb7", "backgroundColors": [ "#ceecb7", "#8bbb75" ], "backgroundLightness": "light", "logoStyle": "colored", "text": "#167158", "alias": "ru-cetelem", "country": "ru", "logoPng": "ru-cetelem.png", "logoSvg": "ru-cetelem.svg" }, "ru-citi": { "name": "Ситибанк", "nameEn": "Citibank", "url": "https://www.citibank.ru/", "backgroundColor": "#008bd0", "backgroundColors": [ "#00bcf2", "#004e90" ], "backgroundLightness": "dark", "logoStyle": "white", "text": "#fff", "alias": "ru-citi", "country": "ru", "logoPng": "ru-citi.png", "logoSvg": "ru-citi.svg" }, "ru-globex": { "name": "Глобэкс", "nameEn": "Globexbank", "url": "http://www.globexbank.ru/", "backgroundColor": "#9bdaff", "backgroundColors": [ "#9bdaff", "#ffd2a2" ], "backgroundLightness": "light", "logoStyle": "colored", "text": "#072761", "alias": "ru-globex", "country": "ru", "logoPng": "ru-globex.png" }, "ru-gpb": { "name": "Газпромбанк", "nameEn": "Gazprombank", "url": "http://www.gazprombank.ru/", "backgroundColor": "#02356c", "backgroundColors": [ "#044b98", "#02356c" ], "backgroundLightness": "dark", "logoStyle": "white", "text": "#fff", "alias": "ru-gpb", "country": "ru", "logoPng": "ru-gpb.png", "logoSvg": "ru-gpb.svg" }, "ru-hcf": { "name": "Хоум Кредит Банк", "nameEn": "HCF Bank", "url": "http://homecredit.ru/", "backgroundColor": "#e41701", "backgroundColors": [ "#e41701", "#bd1908" ], "backgroundLightness": "dark", "logoStyle": "white", "text": "#fff", "alias": "ru-hcf", "country": "ru", "logoPng": "ru-hcf.png", "logoSvg": "ru-hcf.svg" }, "ru-jugra": { "name": "Югра", "nameEn": "Jugra", "url": "http://www.jugra.ru/", "backgroundColor": "#d6ffe6", "backgroundColors": [ "#d6ffe6", "#fff1e4" ], "backgroundLightness": "light", "logoStyle": "colored", "text": "#088237", "alias": "ru-jugra", "country": "ru", "logoPng": "ru-jugra.png" }, "ru-mib": { "name": "Московский Индустриальный Банк", "nameEn": "Mosсow Industrial Bank", "url": "http://www.minbank.ru/", "backgroundColor": "#8f0e0f", "backgroundColors": [ "#ce4647", "#8f0e0f" ], "backgroundLightness": "dark", "logoStyle": "white", "text": "#fff", "alias": "ru-mib", "country": "ru", "logoPng": "ru-mib.png" }, "ru-mkb": { "name": "Московский Кредитный Банк", "nameEn": "Credit Bank of Moscow", "url": "https://mkb.ru/", "backgroundColor": "#eeeeee", "backgroundColors": [ "#eeeeee", "#f9dee8" ], "backgroundLightness": "light", "logoStyle": "colored", "text": "#ae0039", "alias": "ru-mkb", "country": "ru", "logoPng": "ru-mkb.png" }, "ru-mob": { "name": "Московский Областной Банк", "nameEn": "Mosoblbank", "url": "http://www.mosoblbank.ru/", "backgroundColor": "#dd3c3d", "backgroundColors": [ "#e14041", "#8e2222" ], "backgroundLightness": "dark", "logoStyle": "white", "text": "#fff", "alias": "ru-mob", "country": "ru", "logoPng": "ru-mob.png" }, "ru-mts": { "name": "МТС Банк", "nameEn": "MTS Bank", "url": "http://www.mtsbank.ru/", "backgroundColor": "#de1612", "backgroundColors": [ "#ff0000", "#ba0e0a" ], "backgroundLightness": "dark", "logoStyle": "white", "text": "#fff", "alias": "ru-mts", "country": "ru", "logoPng": "ru-mts.png", "logoSvg": "ru-mts.svg" }, "ru-novikom": { "name": "Новикомбанк", "nameEn": "Novikombank", "url": "http://www.novikom.ru/", "backgroundColor": "#00529b", "backgroundColors": [ "#00529b", "#0a4477" ], "backgroundLightness": "dark", "logoStyle": "white", "text": "#fff", "alias": "ru-novikom", "country": "ru", "logoPng": "ru-novikom.png", "logoSvg": "ru-novikom.svg" }, "ru-open": { "name": "ФК Открытие", "nameEn": "Otkritie FC", "url": "https://www.open.ru/", "backgroundColor": "#00b3e1", "backgroundColors": [ "#29c9f3", "#00b3e1" ], "backgroundLightness": "dark", "logoStyle": "white", "text": "#fff", "alias": "ru-open", "country": "ru", "logoPng": "ru-open.png", "logoSvg": "ru-open.svg" }, "ru-otp": { "name": "ОТП Банк", "nameEn": "OTP Bank", "url": "https://www.otpbank.ru/", "backgroundColor": "#acff90", "backgroundColors": [ "#acff90", "#9edabf" ], "backgroundLightness": "light", "logoStyle": "colored", "text": "#006437", "alias": "ru-otp", "country": "ru", "logoPng": "ru-otp.png", "logoSvg": "ru-otp.svg" }, "ru-pochta": { "name": "Почта Банк", "nameEn": "Pochtabank", "url": "https://www.pochtabank.ru/", "backgroundColor": "#efefef", "backgroundColors": [ "#efefef", "#dbe1ff" ], "backgroundLightness": "light", "logoStyle": "colored", "text": "#001689", "alias": "ru-pochta", "country": "ru", "logoPng": "ru-pochta.png", "logoSvg": "ru-pochta.svg" }, "ru-psb": { "name": "Промсвязьбанк", "nameEn": "Promsvyazbank", "url": "http://www.psbank.ru/", "backgroundColor": "#c5cfef", "backgroundColors": [ "#f7d1b5", "#c5cfef" ], "backgroundLightness": "light", "logoStyle": "colored", "text": "#274193", "alias": "ru-psb", "country": "ru", "logoPng": "ru-psb.png", "logoSvg": "ru-psb.svg" }, "ru-raiffeisen": { "name": "Райффайзенбанк", "nameEn": "Raiffeisenbank bank", "url": "https://www.raiffeisen.ru/", "backgroundColor": "#efe6a2", "backgroundColors": [ "#eeeeee", "#efe6a2" ], "backgroundLightness": "light", "logoStyle": "black", "text": "#000", "alias": "ru-raiffeisen", "country": "ru", "logoPng": "ru-raiffeisen.png", "logoSvg": "ru-raiffeisen.svg" }, "ru-reb": { "name": "РосЕвроБанк", "nameEn": "Rosevrobank", "url": "http://www.rosevrobank.ru/", "backgroundColor": "#4b1650", "backgroundColors": [ "#8b2d8e", "#4b1650" ], "backgroundLightness": "dark", "logoStyle": "white", "text": "#fff", "alias": "ru-reb", "country": "ru", "logoPng": "ru-reb.png" }, "ru-ren": { "name": "Ренессанс Кредит", "nameEn": "Renaissance Capital", "url": "https://rencredit.ru/", "backgroundColor": "#ffe6f1", "backgroundColors": [ "#ffe6f1", "#f9fff1" ], "backgroundLightness": "light", "logoStyle": "colored", "text": "#439539", "alias": "ru-ren", "country": "ru", "logoPng": "ru-ren.png" }, "ru-rgs": { "name": "Росгосстрах Банк", "nameEn": "Rosgosstrakh Bank", "url": "https://www.rgsbank.ru/", "backgroundColor": "#b31b2c", "backgroundColors": [ "#b31b2c", "#6f030f" ], "backgroundLightness": "dark", "logoStyle": "colored", "text": "#ffe2b8", "alias": "ru-rgs", "country": "ru", "logoPng": "ru-rgs.png", "logoSvg": "ru-rgs.svg" }, "ru-rosbank": { "name": "Росбанк", "nameEn": "Rosbank bank", "url": "http://www.rosbank.ru/", "backgroundColor": "#d3b9ba", "backgroundColors": [ "#d3b9ba", "#b1898b" ], "backgroundLightness": "light", "logoStyle": "black", "text": "#000", "alias": "ru-rosbank", "country": "ru", "logoPng": "ru-rosbank.png", "logoSvg": "ru-rosbank.svg" }, "ru-roscap": { "name": "Российский Капитал", "nameEn": "Rossiysky Capital", "url": "http://www.roscap.ru/", "backgroundColor": "#ffdcc1", "backgroundColors": [ "#ffdcc1", "#ffced0" ], "backgroundLightness": "light", "logoStyle": "colored", "text": "#000", "alias": "ru-roscap", "country": "ru", "logoPng": "ru-roscap.png" }, "ru-rossiya": { "name": "Россия", "nameEn": "Rossiya", "url": "http://www.abr.ru/", "backgroundColor": "#eeeeee", "backgroundColors": [ "#eeeeee", "#98c2dd" ], "backgroundLightness": "light", "logoStyle": "colored", "text": "#07476e", "alias": "ru-rossiya", "country": "ru", "logoPng": "ru-rossiya.png" }, "ru-rsb": { "name": "Русский Стандарт", "nameEn": "Russian Standard Bank", "url": "https://www.rsb.ru/", "backgroundColor": "#414042", "backgroundColors": [ "#6a656f", "#414042" ], "backgroundLightness": "dark", "logoStyle": "white", "text": "#fff", "alias": "ru-rsb", "country": "ru", "logoPng": "ru-rsb.png", "logoSvg": "ru-rsb.svg" }, "ru-rshb": { "name": "Россельхозбанк", "nameEn": "Rosselkhozbank", "url": "http://www.rshb.ru/", "backgroundColor": "#007f2b", "backgroundColors": [ "#007f2b", "#005026" ], "backgroundLightness": "dark", "logoStyle": "white", "text": "#ffcd00", "alias": "ru-rshb", "country": "ru", "logoPng": "ru-rshb.png", "logoSvg": "ru-rshb.svg" }, "ru-sberbank": { "name": "Сбербанк России", "nameEn": "Sberbank", "url": "https://www.sberbank.ru/", "backgroundColor": "#1a9f29", "backgroundColors": [ "#1a9f29", "#0d7518" ], "backgroundLightness": "dark", "logoStyle": "white", "text": "#fff", "alias": "ru-sberbank", "country": "ru", "logoPng": "ru-sberbank.png", "logoSvg": "ru-sberbank.svg" }, "ru-skb": { "name": "СКБ-Банк", "nameEn": "SKB-Bank", "url": "http://www.skbbank.ru/", "backgroundColor": "#006b5a", "backgroundColors": [ "#31a899", "#006b5a" ], "backgroundLightness": "dark", "logoStyle": "white", "text": "#fff", "alias": "ru-skb", "country": "ru", "logoPng": "ru-skb.png" }, "ru-smp": { "name": "СМП Банк", "nameEn": "SMP Bank", "url": "http://smpbank.ru/", "backgroundColor": "#9fe5ff", "backgroundColors": [ "#9fe5ff", "#5ea6d6" ], "backgroundLightness": "light", "logoStyle": "colored", "text": "#005288", "alias": "ru-smp", "country": "ru", "logoPng": "ru-smp.png", "logoSvg": "ru-smp.svg" }, "ru-sovkom": { "name": "Совкомбанк", "nameEn": "Sovcombank bank", "url": "https://sovcombank.ru/", "backgroundColor": "#c9e4f6", "backgroundColors": [ "#c9e4f6", "#f5fafd" ], "backgroundLightness": "light", "logoStyle": "colored", "text": "#004281", "alias": "ru-sovkom", "country": "ru", "logoPng": "ru-sovkom.png" }, "ru-spb": { "name": "Банк «Санкт-Петербург»", "nameEn": "Bank Saint Petersburg", "url": "https://www.bspb.ru/", "backgroundColor": "#ffcfcf", "backgroundColors": [ "#ffcfcf", "#d2553f" ], "backgroundLightness": "light", "logoStyle": "colored", "text": "#000", "alias": "ru-spb", "country": "ru", "logoPng": "ru-spb.png" }, "ru-sviaz": { "name": "Связь-Банк", "nameEn": "Sviaz-Bank", "url": "https://www.sviaz-bank.ru/", "backgroundColor": "#d2e0ec", "backgroundColors": [ "#d2e0ec", "#caecd8" ], "backgroundLightness": "light", "logoStyle": "colored", "text": "#165a9a", "alias": "ru-sviaz", "country": "ru", "logoPng": "ru-sviaz.png" }, "ru-tcb": { "name": "Транскапиталбанк", "nameEn": "Transcapitalbank", "url": "https://www.tkbbank.ru/", "backgroundColor": "#8cf5f4", "backgroundColors": [ "#8cf5f4", "#ffe6bf" ], "backgroundLightness": "light", "logoStyle": "colored", "text": "#005599", "alias": "ru-tcb", "country": "ru", "logoPng": "ru-tcb.png" }, "ru-tinkoff": { "name": "Тинькофф Банк", "nameEn": "Tinkoff Bank", "url": "https://www.tinkoff.ru/", "backgroundColor": "#333", "backgroundColors": [ "#444", "#222" ], "backgroundLightness": "dark", "logoStyle": "white", "text": "#fff", "alias": "ru-tinkoff", "country": "ru", "logoPng": "ru-tinkoff.png", "logoSvg": "ru-tinkoff.svg" }, "ru-trust": { "name": "Траст", "nameEn": "Trust", "url": "http://www.trust.ru/", "backgroundColor": "#231f20", "backgroundColors": [ "#403739", "#231f20" ], "backgroundLightness": "dark", "logoStyle": "white", "text": "#fff", "alias": "ru-trust", "country": "ru", "logoPng": "ru-trust.png" }, "ru-ubrd": { "name": "Уральский Банк Реконструкции и Развития", "nameEn": "UBRD", "url": "http://www.ubrr.ru/", "backgroundColor": "#ffd9e4", "backgroundColors": [ "#ffd9e4", "#b6d1e3" ], "backgroundLightness": "light", "logoStyle": "black", "text": "#000", "alias": "ru-ubrd", "country": "ru", "logoPng": "ru-ubrd.png" }, "ru-ucb": { "name": "ЮниКредит Банк", "nameEn": "UniCredit Bank", "url": "https://www.unicreditbank.ru/", "backgroundColor": "#250c0c", "backgroundColors": [ "#402727", "#250c0c" ], "backgroundLightness": "dark", "logoStyle": "white", "text": "#fff", "alias": "ru-ucb", "country": "ru", "logoPng": "ru-ucb.png", "logoSvg": "ru-ucb.svg" }, "ru-uralsib": { "name": "Банк Уралсиб", "nameEn": "Uralsib", "url": "https://www.uralsib.ru/", "backgroundColor": "#2c4257", "backgroundColors": [ "#6289aa", "#2c4257" ], "backgroundLightness": "dark", "logoStyle": "white", "text": "#fff", "alias": "ru-uralsib", "country": "ru", "logoPng": "ru-uralsib.png", "logoSvg": "ru-uralsib.svg" }, "ru-vbrr": { "name": "Всероссийский Банк Развития Регионов", "nameEn": "Russian Regional Development Bank", "url": "https://www.vbrr.ru/", "backgroundColor": "#173e6d", "backgroundColors": [ "#4a5e75", "#173e6d" ], "backgroundLightness": "dark", "logoStyle": "white", "text": "#fff", "alias": "ru-vbrr", "country": "ru", "logoPng": "ru-vbrr.png", "logoSvg": "ru-vbrr.svg" }, "ru-veb": { "name": "Восточный Экспресс Банк", "nameEn": "Eastern Express Bank", "url": "https://www.vostbank.ru/", "backgroundColor": "#004e96", "backgroundColors": [ "#004e96", "#ee3224" ], "backgroundLightness": "dark", "logoStyle": "white", "text": "#fff", "alias": "ru-veb", "country": "ru", "logoPng": "ru-veb.png", "logoSvg": "ru-veb.svg" }, "ru-vozrozhdenie": { "name": "Возрождение", "nameEn": "Bank Vozrozhdenie", "url": "http://www.vbank.ru/", "backgroundColor": "#cedae6", "backgroundColors": [ "#cedae6", "#a4abb3" ], "backgroundLightness": "light", "logoStyle": "colored", "text": "#13427b", "alias": "ru-vozrozhdenie", "country": "ru", "logoPng": "ru-vozrozhdenie.png", "logoSvg": "ru-vozrozhdenie.svg" }, "ru-vtb": { "name": "ВТБ Банк Москвы", "nameEn": "VTB Bank", "url": "http://www.vtb.ru/", "backgroundColor": "#1d2d70", "backgroundColors": [ "#264489", "#1d2d70" ], "backgroundLightness": "dark", "logoStyle": "white", "text": "#fff", "alias": "ru-vtb", "country": "ru", "logoPng": "ru-vtb.png", "logoSvg": "ru-vtb.svg" }, "ru-vtb24": { "name": "ВТБ 24", "nameEn": "VTB 24", "url": "https://www.vtb24.ru/", "backgroundColor": "#c4cde4", "backgroundColors": [ "#c4cde4", "#9fabcc", "#dca9ad" ], "backgroundLightness": "light", "logoStyle": "colored", "text": "#0a2972", "alias": "ru-vtb24", "country": "ru", "logoPng": "ru-vtb24.png" }, "ru-zenit": { "name": "Зенит", "nameEn": "Zenit", "url": "https://www.zenit.ru/", "backgroundColor": "#008c99", "backgroundColors": [ "#3fc2ce", "#008c99" ], "backgroundLightness": "dark", "logoStyle": "white", "text": "#fff", "alias": "ru-zenit", "country": "ru", "logoPng": "ru-zenit.png", "logoSvg": "ru-zenit.svg" } }; var prefixes = { "220001": "ru-gpb", "220003": "ru-psb", "220006": "ru-sviaz", "220008": "ru-rossiya", "220020": "ru-mib", "220022": "ru-binbank", "220023": "ru-avangard", "220030": "ru-raiffeisen", "220488": "ru-smp", "360769": "ru-rsb", "375117": "ru-rsb", "400079": "ru-akbars", "400171": "ru-reb", "400244": "ru-uralsib", "400812": "ru-rosbank", "400814": "ru-rosbank", "400866": "ru-rosbank", "401173": "ru-open", "402107": "ru-vtb", "402177": "ru-raiffeisen", "402178": "ru-raiffeisen", "402179": "ru-raiffeisen", "402311": "ru-otp", "402312": "ru-otp", "402313": "ru-otp", "402326": "ru-mib", "402327": "ru-mib", "402328": "ru-mib", "402333": "ru-sberbank", "402429": "ru-globex", "402457": "ru-novikom", "402507": "ru-psb", "402532": "ru-sovkom", "402533": "ru-sovkom", "402534": "ru-sovkom", "402549": "ru-mib", "402877": "ru-tcb", "402909": "ru-novikom", "402910": "ru-novikom", "402911": "ru-novikom", "402948": "ru-binbank", "402949": "ru-binbank", "403184": "ru-vozrozhdenie", "403218": "ru-roscap", "403324": "ru-globex", "403780": "ru-mkb", "403894": "ru-binbank", "403896": "ru-avangard", "403897": "ru-avangard", "403898": "ru-avangard", "404111": "ru-uralsib", "404114": "ru-avangard", "404136": "ru-gpb", "404204": "ru-mts", "404224": "ru-mts", "404266": "ru-mts", "404267": "ru-mts", "404268": "ru-mts", "404269": "ru-mts", "404270": "ru-gpb", "404586": "ru-open", "404807": "ru-raiffeisen", "404862": "ru-rosbank", "404863": "ru-rosbank", "404885": "ru-raiffeisen", "404890": "ru-rosbank", "404892": "ru-rosbank", "404906": "ru-psb", "405225": "ru-binbank", "405226": "ru-binbank", "405436": "ru-rosbank", "405658": "ru-open", "405665": "ru-roscap", "405666": "ru-roscap", "405667": "ru-roscap", "405669": "ru-roscap", "405870": "ru-open", "405990": "ru-pochta", "405991": "ru-pochta", "405992": "ru-pochta", "405993": "ru-pochta", "406140": "ru-vbrr", "406141": "ru-vbrr", "406356": "ru-mts", "406364": "ru-hcf", "406372": "ru-absolut", "406744": "ru-vtb24", "406767": "ru-rosbank", "406777": "ru-jugra", "406778": "ru-jugra", "406779": "ru-jugra", "406780": "ru-jugra", "406781": "ru-jugra", "406977": "ru-vtb24", "407178": "ru-open", "4075