Моя функция принимает номер карты, который является строкой, и возвращает имя карты. Кажется, что каждая карта работает, но Китай платит одну. Я получаю неопределенный, не знаю почему. Существует около 800 префиксов China Pay. Я перебрал эти 800 чисел и поместил их в пустой массив, по которому я затем искал индекс. Если он соответствует одному из префиксов в массиве и одной из двух длин, он должен вернуть имя, но это не так.
Любая помощь будет принята с благодарностью. Я уверен, что есть более эффективный способ сделать это, но это куда мой мозг пошел. Это должно работать, не уверен, почему это не так.
// loop through the 800 numbers and push to an empty array
var chinaPayPrefix = [];
for (let i = 622126; i <= 622925; i++){
let chinaPayStringOne = i.toString();
chinaPayPrefix.push(chinaPayStringOne);
}
for (let j = 6282; j <= 6288; j++){
let chinaPayStringTwo = j.toString();
chinaPayPrefix.push(chinaPayStringTwo);
}
// card lengths
const discoverCardLength = [16,19];
const maestroCardLength = [12,13,14,15,16,17,18,19];
const visaCardLength = [13,16,19];
const masterCardLength = 16;
const dinersCardLength = 14;
const americanExpressLength = 15;
const chinaPayLength = [16,19];
// card prefixes
const discoverPrefix = ['6011','644','645','646','647','648','649','65'];
const maestroPrefix = ['5018','5020','5038','6304'];
const visaPrefix = ['4'];
const mastercardPrefix = ['51','52','53','54','55'];
const dinersPrefix = ['38', '39'];
const americanExpressPrefix = ['34', '37'];
// substrings of cardNumber
let singleSplit = cardNumber.substring(0,1);
let doubleSplit = cardNumber.substring(0,2);
let tripleSplit = cardNumber.substring(0,3);
let quadSplit = cardNumber.substring(0,4);
let sextupleSplit = cardNumber.substring(0,7);
// search if the applicable substring is present and length is correct
if (dinersPrefix.indexOf(doubleSplit) > -1 && cardNumber.length === dinersCardLength) {
return 'Diner\'s Club';
} else if (americanExpressPrefix.indexOf(doubleSplit) > -1 && cardNumber.length === americanExpressLength) {
return 'American Express';
} else if (visaPrefix.indexOf(singleSplit) > -1 && visaCardLength.indexOf(cardNumber.length) > - 1){
return 'Visa';
} else if (mastercardPrefix.indexOf(doubleSplit) > -1 && cardNumber.length === masterCardLength){
return 'MasterCard';
} else if (discoverPrefix.indexOf(doubleSplit) > -1 || discoverPrefix.indexOf(tripleSplit) > -1 || discoverPrefix.indexOf(quadSplit) > -1 && discoverCardLength.indexOf(cardNumber.length) > - 1){
return 'Discover';
} else if (maestroPrefix.indexOf(quadSplit) > - 1 && maestroCardLength.indexOf(cardNumber.length) > - 1){
return 'Maestro';
} else if (chinaPayPrefix.indexOf(sextupleSplit) > - 1 && chinaPayLength.indexOf(cardNumber.length) > - 1){
return 'China UnionPay';
}else if (chinaPayPrefix.indexOf(quadSplit) > - 1 && chinaPayLength.indexOf(cardNumber.length) > - 1){
return 'China UnionPay';
}else if (chinaPayPrefix.indexOf(tripleSplit) > - 1 && chinaPayLength.indexOf(cardNumber.length) > - 1){
return 'China UnionPay';
}
};