Problem
- Given a credit card number we can determine who the issuer/vendor is with a few basic knowns.
- 주어진 신용카드 번호로 발행사를 확인할 수 있다.
- Complete the function that will use the values showns below to determine the card issuer for a given card number.
- 아래의 값을 사용해서 카드 발행사를 판단하는 함수를 작성한다.
- If the number cannot be matched then the function should return the string ‘Unknown’.
- 일치하는 번호가 없다면, ‘Unknown’을 반환한다.
Values
Card Type | Begins With | Number Length |
---|
AMEX | 34 or 37 | 15 |
VISA | 4 | 13 or 16 |
Mastercard | 51, 52, 53, 54 or 55 | 16 |
Discover | 6011 | 16 |
Solution 01
function cardChecking(cardNum) {
let cardStr = cardNum.toString();
if (cardStr.match(/^3[4|7]\d{13}$/g)) return 'AMEX';
if (cardStr.match(/^4(\d{12}|\d{15})$/g)) return 'VISA';
if (cardStr.match(/^5[1-5]\d{14}$/g)) return 'Mastercard';
if (cardStr.match(/^6011\d{12}$/g)) return 'Discover';
return 'Unknown';
}
cardChecking(341111111111111); // AMEX
cardChecking(4111111111111111); // VISA
cardChecking(5211111111111111); // Mastercard
cardChecking(6011111111111111); // Discover
cardChecking(8111111111111111); // Unknown
toString()
: 숫자를 문자열로 변환한다.
match()
: 문자열에서 정규식과 일치하는 문자를 검색하고, 배열로 반환한다.
^
: 입력의 시작 부분에 대응
$
: 입력의 끝 부분에 대응
|
: or
\d
: 숫자에 대응 (= [0-9]
)
{n}
: 앞의 문자열이 정확히 n번 나타나는 부분에 대응
g
: 전역 검색
Solution 02
function cardChecking(cardNum) {
let cardStr = cardNum.toString();
if (/^3[4|7]\d{13}$/.test(cardStr)) return 'AMEX';
if (/^4(\d{12}|\d{15})$/.test(cardStr)) return 'VISA';
if (/^5[1-5]\d{14}$/.test(cardStr)) return 'Mastercard';
if (/^6011\d{12}$/.test(cardStr)) return 'Discover';
return 'Unknown';
}
cardChecking(341111111111111); // AMEX
cardChecking(4111111111111111); // VISA
cardChecking(5211111111111111); // Mastercard
cardChecking(6011111111111111); // Discover
cardChecking(8111111111111111); // Unknown
test()
: 대응되는 문자열이 있는지 검색하고, true/false를 반환한다.
Solution 03
function cardChecking(cardNum) {
const issuers = {
AMEX: /^3[4|7]\d{13}$/,
VISA: /^4(\d{12}|\d{15})$/,
Mastercard: /^5[1-5]\d{14}$/,
Discover: /^6011\d{12}$/
};
for (let issuer in issuers) {
if (issuers[issuer].test(cardNum.toString())) {
return issuer;
}
}
return 'Unknown';
}
cardChecking(341111111111111); // AMEX
cardChecking(4111111111111111); // VISA
cardChecking(5211111111111111); // Mastercard
cardChecking(6011111111111111); // Discover
cardChecking(8111111111111111); // Unknown