var format= { "EMAIL" : /^[\w-\.]+\@[\w\.-]+\.[a-zA-Z]{2,4}$/, "ENGTHAIALPHA" : /^[\s\r¡-ù0-9a-zA-Z]+$/, "ENGTHAINAME" : /^[\s\r\.\'¡-ëa-zA-Z]+$/, "NUMBER" : /^[\r0-9]+$/, "NOTNUMBER" : /^[^0-9)]+$/, //cannot press enter from in this type. Must remove '^' by Invert CharSet "ENGALPHA" : /^[\ra-zA-Z]+$/, "ENGALPHALOWER" : /^[\ra-z]+$/, "ENGALPHAUPPER" : /^[\rA-Z]+$/ }; function validation (inputform,customfunction) { for (i=0;i 96) tmpyear = "19" + form.usercardexpireyear.value; else if (form.usercardexpireyear.value < 21) tmpyear = "20" + form.usercardexpireyear.value; else { alert("The Expiration Year is not valid."); form.usercardexpireyear.focus(); return false; } tmpmonth = form.usercardexpiremonth.options[form.usercardexpiremonth.selectedIndex].value; // The following line doesn't work in IE3, you need to change it // to something like "(new usercardtype())...". // if (!usercardtype().isExpiryDate(tmpyear, tmpmonth)) { if (!(new usercardtype()).isExpiryDate(tmpyear, tmpmonth)) { alert("This card has already expired."); form.usercardexpireyear.focus(); return false; } card = form.usercardtype.options[form.usercardtype.selectedIndex].value; var retval = eval(card + ".checkCardNumber(\"" + form.usercardnumber.value + "\", " + tmpyear + ", " + tmpmonth + ");"); cardname = ""; if (!retval) { // The cardnumber has the valid luhn checksum, but we want to know which // usercardtype it belongs to. for (var n = 0; n < Cards.size; n++) { if (Cards[n].checkCardNumber(form.usercardnumber.value, tmpyear, tmpmonth)) { cardname = Cards[n].getusercardtype(); break; } } if (cardname.length > 0) { alert("This card number is not valid."); form.usercardnumber.focus(); return false; }else { alert("This card number is not valid."); form.usercardnumber.focus(); return false; } }else return true; } /*************************************************************************\ Object usercardtype([String usercardtype, String rules, String len, int year, int month]) usercardtype : type of card, eg: MasterCard, Visa, etc. rules : rules of the cardnumber, eg: "4", "6011", "34,37". len : valid length of cardnumber, eg: "16,19", "13,16". year : year of expiry date. month : month of expiry date. eg: var VisaCard = new usercardtype("Visa", "4", "16"); var AmExCard = new usercardtype("AmEx", "34,37", "15"); \*************************************************************************/ function usercardtype() { var n; var argv = usercardtype.arguments; var argc = usercardtype.arguments.length; this.objname = "object usercardtype"; var tmpusercardtype = (argc > 0) ? argv[0] : "CardObject"; var tmprules = (argc > 1) ? argv[1] : "0,1,2,3,4,5,6,7,8,9"; var tmplen = (argc > 2) ? argv[2] : "13,14,15,16,19"; this.setCardNumber = setCardNumber; // set CardNumber method. this.setusercardtype = setusercardtype; // setusercardtype method. this.setLen = setLen; // setLen method. this.setRules = setRules; // setRules method. this.setExpiryDate = setExpiryDate; // setExpiryDate method. this.setusercardtype(tmpusercardtype); this.setLen(tmplen); this.setRules(tmprules); if (argc > 4) this.setExpiryDate(argv[3], argv[4]); this.checkCardNumber = checkCardNumber; // checkCardNumber method. this.getExpiryDate = getExpiryDate; // getExpiryDate method. this.getusercardtype = getusercardtype; // getusercardtype method. this.isCardNumber = isCardNumber; // isCardNumber method. this.isExpiryDate = isExpiryDate; // isExpiryDate method. this.luhnCheck = luhnCheck;// luhnCheck method. return this; } /*************************************************************************\ boolean checkCardNumber([String cardnumber, int year, int month]) return true if cardnumber pass the luhncheck and the expiry date is valid, else return false. \*************************************************************************/ function checkCardNumber() { var argv = checkCardNumber.arguments; var argc = checkCardNumber.arguments.length; var cardnumber = (argc > 0) ? argv[0] : this.usercardnumber; var year = (argc > 1) ? argv[1] : this.year; var month = (argc > 2) ? argv[2] : this.month; this.setCardNumber(cardnumber); this.setExpiryDate(year, month); if (!this.isCardNumber()) return false; if (!this.isExpiryDate()) return false; return true; } /*************************************************************************\ String getusercardtype() return the usercardtype. \*************************************************************************/ function getusercardtype() { return this.usercardtype; } /*************************************************************************\ String getExpiryDate() return the expiry date. \*************************************************************************/ function getExpiryDate() { return this.month + "/" + this.year; } /*************************************************************************\ boolean isCardNumber([String cardnumber]) return true if cardnumber pass the luhncheck and the rules, else return false. \*************************************************************************/ function isCardNumber() { var argv = isCardNumber.arguments; var argc = isCardNumber.arguments.length; var cardnumber = (argc > 0) ? argv[0] : this.usercardnumber; if (!this.luhnCheck()) return false; for (var n = 0; n < this.len.size; n++) if (cardnumber.toString().length == this.len[n]) { for (var m = 0; m < this.rules.size; m++) { var headdigit = cardnumber.substring(0, this.rules[m].toString().length); if (headdigit == this.rules[m]) return true; } return false; } return false; } /*************************************************************************\ boolean isExpiryDate([int year, int month]) return true if the date is a valid expiry date, else return false. \*************************************************************************/ function isExpiryDate() { var argv = isExpiryDate.arguments; var argc = isExpiryDate.arguments.length; year = argc > 0 ? argv[0] : this.year; month = argc > 1 ? argv[1] : this.month; if (!isNum(year+"")) return false; if (!isNum(month+"")) return false; today = new Date(); expiry = new Date(year, month); if (today.getTime() > expiry.getTime()) return false; else return true; } /*************************************************************************\ boolean isNum(String argvalue) return true if argvalue contains only numeric characters, else return false. \*************************************************************************/ function isNum(argvalue) { argvalue = argvalue.toString(); if (argvalue.length == 0) return false; for (var n = 0; n < argvalue.length; n++) if (argvalue.substring(n, n+1) < "0" || argvalue.substring(n, n+1) > "9") return false; return true; } /*************************************************************************\ boolean luhnCheck([String CardNumber]) return true if CardNumber pass the luhn check else return false. Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl \*************************************************************************/ function luhnCheck() { var argv = luhnCheck.arguments; var argc = luhnCheck.arguments.length; var CardNumber = argc > 0 ? argv[0] : this.usercardnumber; if (! isNum(CardNumber)) { return false; } var no_digit = CardNumber.length; var oddoeven = no_digit & 1; var sum = 0; for (var count = 0; count < no_digit; count++) { var digit = parseInt(CardNumber.charAt(count)); if (!((count & 1) ^ oddoeven)) { digit *= 2; if (digit > 9) digit -= 9; } sum += digit; } if (sum % 10 == 0) return true; else return false; } /*************************************************************************\ ArrayObject makeArray(int size) return the array object in the size specified. \*************************************************************************/ function makeArray(size) { this.size = size; return this; } /*************************************************************************\ usercardtype setCardNumber(cardnumber) return the usercardtype object. \*************************************************************************/ function setCardNumber(cardnumber) { this.usercardnumber = cardnumber; return this; } /*************************************************************************\ usercardtype setusercardtype(usercardtype) return the usercardtype object. \*************************************************************************/ function setusercardtype(usercardtype) { this.usercardtype = usercardtype; return this; } /*************************************************************************\ usercardtype setExpiryDate(year, month) return the usercardtype object. \*************************************************************************/ function setExpiryDate(year, month) { this.year = year; this.month = month; return this; } /*************************************************************************\ usercardtype setLen(len) return the usercardtype object. \*************************************************************************/ function setLen(len) { // Create the len array. if (len.length == 0 || len == null) len = "13,14,15,16,19"; var tmplen = len; n = 1; while (tmplen.indexOf(",") != -1) { tmplen = tmplen.substring(tmplen.indexOf(",") + 1, tmplen.length); n++; } this.len = new makeArray(n); n = 0; while (len.indexOf(",") != -1) { var tmpstr = len.substring(0, len.indexOf(",")); this.len[n] = tmpstr; len = len.substring(len.indexOf(",") + 1, len.length); n++; } this.len[n] = len; return this; } /*************************************************************************\ usercardtype setRules() return the usercardtype object. \*************************************************************************/ function setRules(rules) { // Create the rules array. if (rules.length == 0 || rules == null) rules = "0,1,2,3,4,5,6,7,8,9"; var tmprules = rules; n = 1; while (tmprules.indexOf(",") != -1) { tmprules = tmprules.substring(tmprules.indexOf(",") + 1, tmprules.length); n++; } this.rules = new makeArray(n); n = 0; while (rules.indexOf(",") != -1) { var tmpstr = rules.substring(0, rules.indexOf(",")); this.rules[n] = tmpstr; rules = rules.substring(rules.indexOf(",") + 1, rules.length); n++; } this.rules[n] = rules; return this; }