var Cards = new makeArray(8); Cards[0] = new CardType("MasterCard", "51,52,53,54,55", "16"); var MasterCard = Cards[0]; Cards[1] = new CardType("VisaCard", "4", "13,16"); var VisaCard = Cards[1]; Cards[2] = new CardType("AmExCard", "34,37", "15"); var AmExCard = Cards[2]; Cards[3] = new CardType("DinersClubCard", "30,36,38", "14"); var DinersClubCard = Cards[3]; Cards[4] = new CardType("DiscoverCard", "6011", "16"); var DiscoverCard = Cards[4]; Cards[5] = new CardType("enRouteCard", "2014,2149", "15"); var enRouteCard = Cards[5]; Cards[6] = new CardType("JCBCard", "3088,3096,3112,3158,3337,3528", "16"); var JCBCard = Cards[6]; var LuhnCheckSum = Cards[7] = new CardType(); /*************************************************************************\ Checkx_card_num(form) function called when users click the "check" button. \*************************************************************************/ function Checkx_card_num(form) { var tmpyear; var tmpmonth; var chosenMethod; // we need to only give this check if authorizew is chosen //chosenMethod = 2; var j=0; var count=0; for(i=0;i 96) tmpyear = "19" + form.expiry_year.value; else if (form.expiry_year.value < 21) tmpyear = "20" + form.expiry_year.value; else { alert("The Expiration Year is not valid."); return; } */ tmpyear = form.expiry_year.value; tmpmonth = form.expiry_month.options[form.expiry_month.selectedIndex].value; // The following line doesn't work in IE3, you need to change it // to something like "(new CardType())...". // if (!CardType().isExpiryDate(tmpyear, tmpmonth)) { if (!(new CardType()).isExpiryDate(tmpyear, tmpmonth)) { alert("This card has already expired."); return; } card = form.CardType.options[form.CardType.selectedIndex].value; var retval = eval(card + ".checkx_card_num(\"" + form.x_card_num.value + "\", " + tmpyear + ", " + tmpmonth + ");"); cardname = ""; } if (retval) { // comment this out if used on an order form document.ThisForm.submit(); document.ThisForm.purchase.disabled = true; //alert("This card number appears to be valid."); } else if(chosenMethod == 2) { // The x_card_num has the valid luhn checksum, but we want to know which // cardtype it belongs to. for (var n = 0; n < Cards.size; n++) { if (Cards[n].checkx_card_num(form.x_card_num.value, tmpyear, tmpmonth)) { cardname = Cards[n].getCardType(); break; } } if(chosenMethod == 2) { if (cardname.length > 0) { alert("This looks like a " + cardname + " number, not a " + card + " number."); } else { alert("This card number is not valid."); } } } } /*************************************************************************\ Object CardType([String cardtype, String rules, String len, int year, int month]) cardtype : type of card, eg: MasterCard, Visa, etc. rules : rules of the x_card_num, eg: "4", "6011", "34,37". len : valid length of x_card_num, eg: "16,19", "13,16". year : year of expiry date. month : month of expiry date. eg: var VisaCard = new CardType("Visa", "4", "16"); var AmExCard = new CardType("AmEx", "34,37", "15"); \*************************************************************************/ function CardType() { var n; var argv = CardType.arguments; var argc = CardType.arguments.length; this.objname = "object CardType"; var tmpcardtype = (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.setx_card_num = setx_card_num; // set x_card_num method. this.setCardType = setCardType; // setCardType method. this.setLen = setLen; // setLen method. this.setRules = setRules; // setRules method. this.setExpiryDate = setExpiryDate; // setExpiryDate method. this.setCardType(tmpcardtype); this.setLen(tmplen); this.setRules(tmprules); if (argc > 4) this.setExpiryDate(argv[3], argv[4]); this.checkx_card_num = checkx_card_num; // checkx_card_num method. this.getExpiryDate = getExpiryDate; // getExpiryDate method. this.getCardType = getCardType; // getCardType method. this.isx_card_num = isx_card_num; // isx_card_num method. this.isExpiryDate = isExpiryDate; // isExpiryDate method. this.luhnCheck = luhnCheck;// luhnCheck method. return this; } /*************************************************************************\ boolean checkx_card_num([String x_card_num, int year, int month]) return true if x_card_num pass the luhncheck and the expiry date is valid, else return false. \*************************************************************************/ function checkx_card_num() { var argv = checkx_card_num.arguments; var argc = checkx_card_num.arguments.length; var x_card_num = (argc > 0) ? argv[0] : this.x_card_num; var year = (argc > 1) ? argv[1] : this.year; var month = (argc > 2) ? argv[2] : this.month; this.setx_card_num(x_card_num); this.setExpiryDate(year, month); if (!this.isx_card_num()) return false; if (!this.isExpiryDate()) return false; return true; } /*************************************************************************\ String getCardType() return the cardtype. \*************************************************************************/ function getCardType() { return this.cardtype; } /*************************************************************************\ String getExpiryDate() return the expiry date. \*************************************************************************/ function getExpiryDate() { return this.month + "/" + this.year; } /*************************************************************************\ boolean isx_card_num([String x_card_num]) return true if x_card_num pass the luhncheck and the rules, else return false. \*************************************************************************/ function isx_card_num() { var argv = isx_card_num.arguments; var argc = isx_card_num.arguments.length; var x_card_num = (argc > 0) ? argv[0] : this.x_card_num; if (!this.luhnCheck()) return false; for (var n = 0; n < this.len.size; n++) if (x_card_num.toString().length == this.len[n]) { for (var m = 0; m < this.rules.size; m++) { var headdigit = x_card_num.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 x_card_num]) return true if x_card_num 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 x_card_num = argc > 0 ? argv[0] : this.x_card_num; if (! isNum(x_card_num)) { return false; } var no_digit = x_card_num.length; var oddoeven = no_digit & 1; var sum = 0; for (var count = 0; count < no_digit; count++) { var digit = parseInt(x_card_num.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; } /*************************************************************************\ CardType setx_card_num(x_card_num) return the CardType object. \*************************************************************************/ function setx_card_num(x_card_num) { this.x_card_num = x_card_num; return this; } /*************************************************************************\ CardType setCardType(cardtype) return the CardType object. \*************************************************************************/ function setCardType(cardtype) { this.cardtype = cardtype; return this; } /*************************************************************************\ CardType setExpiryDate(year, month) return the CardType object. \*************************************************************************/ function setExpiryDate(year, month) { this.year = year; this.month = month; return this; } /*************************************************************************\ CardType setLen(len) return the CardType 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; } /*************************************************************************\ CardType setRules() return the CardType 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; } function checkQuantity() { for(i=0;i 8 || j == 7) { if(isNaN(document.payment.x_card_num.value)) { alert('Please enter only numerical values for Credit Card Number!'); } else { alert("Please enter proper 16 digits for Credit Card Number!"); } document.payment.x_card_num.focus(); return false; } var k = Math.floor(j); var m = Math.ceil(j) - k; var c = 0; for (var i=0; i 9 ? Math.floor(a/10 + a%10) : a; } for (var i=0; i document.special_product.quantity.value) { alert('U can select only '+ document.special_product.quantity.value); return false; } } function check_gift_details() { var chosenMethod; var j=0; var count=0; for(i=0;i