function validCreditCard(cardNumber) // returns true or false { var ar = new Array( cardNumber.length ); var i = 0,sum = 0; for( i = 0; i < cardNumber.length; ++i ) { ar[i] = parseInt(cardNumber.charAt(i)); }; for( i = ar.length -2; i >= 0; i-=2 ) { ar[i] *= 2; if( ar[i] > 9 ) ar[i]-=9; }; for( i = 0; i < ar.length; ++i ) { sum += ar[i]; }; return (((sum%10)==0)?true:false); }; function typeOfCreditCard(cardNumber) // returns "INVALID", "MC", "VISA", "AMEX", or "DISCOVER" { if (cardNumber.length < 13 || cardNumber.length > 16) return "INVALID"; if (cardNumber.length == 13) { if (cardNumber.substr(0,1) != "4") return "INVALID"; else return "VISA"; }; if (cardNumber.length == 14) return "INVALID"; if (cardNumber.length == 15) { if (cardNumber.substr(0,2) == "34" || cardNumber.substr(0,2) == "37") return "AMEX"; else return "INVALID"; }; if (cardNumber.length == 16) { if (cardNumber.substr(0,4) == "6011") return "DISCOVER"; if (cardNumber.substr(0,1) == "4") return "VISA"; if (cardNumber.substr(0,2) == "51" || cardNumber.substr(0,2) == "52" || cardNumber.substr(0,2) == "53" || cardNumber.substr(0,2) == "54" || cardNumber.substr(0,2) == "55") return "MC"; return "INVALID"; }; return "INVALID"; }; // checks if the cvv is valid for the type of card provided function validCVV2(cvv, cardNumber) { var type = typeOfCreditCard(cardNumber); if (type == "INVALID") return false; if ((type == "VISA" || type == "MC" || type == "DISCOVER") && cvv.length != 3) return false; if (type == "AMEX" && cvv.length != 4) return false; return true; }; // checks if the expiration is before today's date // year needs to be 4 digit - 2008 // month needs to be 1 through 12 function validExpiration(year, month) { year = parseInt(year); month = parseInt(month); if (month == 12) { month = 1; year += 1; } else month += 1; var today = new Date(); var exp = new Date(year, month-1, 1, 0, 0, 0); if (today > exp) return false; return true; };