// BASIC DATA VALIDATION FUNCTIONS: // isEmail (s [,eok]) // isUSPhoneNumber (s [,eok]) // isInteger (s [,eok]) // isYear (s [,eok]) // isMonth (s [,eok]) // CREDIT CARD DATA VALIDATION FUNCTIONS // // isCreditCard (st) // isVisa (cc) // isMasterCard (cc) // isAmericanExpress (cc) // isCardMatch (Type, Number) // VARIABLE DECLARATIONS var digits = "0123456789"; var defaultEmptyOK = false var digitsInUSPhoneNumber = 10; function stripCharsNotInBag (s, bag) { var i; var returnString = ""; // Search through string's characters one by one. // If character is in bag, append to returnString. for (i = 0; i < s.length; i++) { // Check that current character isn't whitespace. var c = s.charAt(i); if (bag.indexOf(c) != -1) returnString += c; } return returnString; } // BOI, followed by one or more characters, followed by @, // followed by one or more characters, followed by ., // followed by one or more characters, followed by EOI. var reEmail = /^.+\@.+\..+$/ // BOI, followed by one or more digits, followed by EOI. var reInteger = /^\d+$/ // s is an abbreviation for "string" var sEmail = "Email" var sPhone = "Phone Number" var sFax = "Fax Number" var sExpirationDate = "Expiration Date" var sCreditCardNumber = "Credit Card Number" function isEmpty(s) { return ((s == null) || (s.length == 0)) } function isEmail (s) { if (isEmpty(s)) if (isEmail.arguments.length == 1) return defaultEmptyOK; else return (isEmail.arguments[1] == true); else { return reEmail.test(s) } } function isUSPhoneNumber (s) { if (isEmpty(s)) if (isUSPhoneNumber.arguments.length == 1) return defaultEmptyOK; else return (isUSPhoneNumber.arguments[1] == true); return (isInteger(s) && s.length == digitsInUSPhoneNumber) } function isInteger (s) { var i; if (isEmpty(s)) if (isInteger.arguments.length == 1) return defaultEmptyOK; else return (isInteger.arguments[1] == true); return reInteger.test(s) } function isYear (s) { if (isEmpty(s)) if (isMonth.arguments.length == 1) return defaultEmptyOK; else return (isMonth.arguments[1] == true); return isIntegerInRange (s, 0, 99); } function isMonth (s) { if (isEmpty(s)) if (isMonth.arguments.length == 1) return defaultEmptyOK; else return (isMonth.arguments[1] == true); return isIntegerInRange (s, 1, 12); } function isIntegerInRange (s, a, b) { if (isEmpty(s)) if (isIntegerInRange.arguments.length == 1) return defaultEmptyOK; else return (isIntegerInRange.arguments[1] == true); // Catch non-integer strings to avoid creating a NaN below, // which isn't available on JavaScript 1.0 for Windows. if (!isInteger(s, false)) return false; // Now, explicitly change the type to integer via parseInt // so that the comparison code below will work both on // JavaScript 1.2 (which typechecks in equality comparisons) // and JavaScript 1.1 and before (which doesn't). var num = parseInt (s); return ((num >= a) && (num <= b)); } function isCreditCard(st) { // Encoding only works on cards with less than 19 digits if (st.length > 19) return (false); sum = 0; mul = 1; l = st.length; for (i = 0; i < l; i++) { digit = st.substring(l-i-1,l-i); tproduct = parseInt(digit ,10)*mul; if (tproduct >= 10) sum += (tproduct % 10) + 1; else sum += tproduct; if (mul == 1) mul++; else mul--; } if ((sum % 10) == 0) return (true); else return (false); } function isVisa(cc) { if (((cc.length == 16) || (cc.length == 13)) && (cc.substring(0,1) == 4)) return isCreditCard(cc); return false; } function isMasterCard(cc) { firstdig = cc.substring(0,1); seconddig = cc.substring(1,2); if ((cc.length == 16) && (firstdig == 5) && ((seconddig >= 1) && (seconddig <= 5))) return isCreditCard(cc); return false; } function isAmericanExpress(cc) { firstdig = cc.substring(0,1); seconddig = cc.substring(1,2); if ((cc.length == 15) && (firstdig == 3) && ((seconddig == 4) || (seconddig == 7))) return isCreditCard(cc); return false; } function isCardMatch (cardType, cardNumber) { cardType = cardType.toUpperCase(); var doesMatch = true; if ((cardType == "VISA") && (!isVisa(cardNumber))) doesMatch = false; if ((cardType == "MASTERCARD") && (!isMasterCard(cardNumber))) doesMatch = false; if ( ( (cardType == "AMERICANEXPRESS") || (cardType == "AMEX") ) && (!isAmericanExpress(cardNumber))) doesMatch = false; if ((cardType == "DISCOVER") && (!isDiscover(cardNumber))) doesMatch = false; if ((cardType == "JCB") && (!isJCB(cardNumber))) doesMatch = false; if ((cardType == "DINERS") && (!isDinersClub(cardNumber))) doesMatch = false; if ((cardType == "CARTEBLANCHE") && (!isCarteBlanche(cardNumber))) doesMatch = false; if ((cardType == "ENROUTE") && (!isEnRoute(cardNumber))) doesMatch = false; return doesMatch; }