vue-card-payment
Version:
Awesome credit card payment form
1,895 lines (1,736 loc) • 128 kB
JavaScript
/*!
* 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