-
Notifications
You must be signed in to change notification settings - Fork 15
/
creditcard.min.js
1 lines (1 loc) · 1.05 KB
/
creditcard.min.js
1
var CreditCard={CARDS:{Visa:/^4[0-9]{12}(?:[0-9]{3})?$/,MasterCard:/^5[1-5][0-9]{14}$/,DinersClub:/^3(?:0[0-5]|[68][0-9])[0-9]{11}$/,Amex:/^3[47][0-9]{13}$/,Discover:/^6(?:011|5[0-9]{2})[0-9]{12}$/},TEST_NUMBERS:$w("378282246310005 371449635398431 378734493671000 30569309025904 38520000023237 6011111111111117 6011000990139424 5555555555554444 5105105105105100 4111111111111111 4012888888881881 4222222222222"),validate:function(a){return CreditCard.verifyLuhn10(a)&&!!CreditCard.type(a)&&!CreditCard.isTestNumber(a)},verifyLuhn10:function(a){return($A(CreditCard.strip(a)).reverse().inject(0,function(b,d,c){return b+$A((parseInt(d)*[1,2][c%2]).toString()).inject(0,function(e,f){return e+parseInt(f)})})%10==0)},isTestNumber:function(a){return CreditCard.TEST_NUMBERS.include(CreditCard.strip(a))},strip:function(a){return a.gsub(/\s/,"")},type:function(b){for(var a in CreditCard.CARDS){if(CreditCard["is"+a](b)){return a}}}};(function(){for(var a in CreditCard.CARDS){CreditCard["is"+a]=function(b,c){return CreditCard.CARDS[b].test(CreditCard.strip(c))}.curry(a)}})();