Subversion Repositories Applications.papyrus

Rev

Rev 1318 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
        Copyright (c) 2004-2006, The Dojo Foundation
        All Rights Reserved.

        Licensed under the Academic Free License version 2.1 or above OR the
        modified BSD license. For more information on Dojo licensing, see:

                http://dojotoolkit.org/community/licensing.shtml
*/



dojo.provide("dojo.validate.creditCard");
dojo.require("dojo.lang.common");
dojo.require("dojo.validate.common");
dojo.validate.isValidCreditCard = function (value, ccType) {
        if (value && ccType && ((ccType.toLowerCase() == "er" || dojo.validate.isValidLuhn(value)) && (dojo.validate.isValidCreditCardNumber(value, ccType.toLowerCase())))) {
                return true;
        }
        return false;
};
dojo.validate.isValidCreditCardNumber = function (value, ccType) {
        if (typeof value != "string") {
                value = String(value);
        }
        value = value.replace(/[- ]/g, "");
        var results = [];
        var cardinfo = {"mc":"5[1-5][0-9]{14}", "ec":"5[1-5][0-9]{14}", "vi":"4([0-9]{12}|[0-9]{15})", "ax":"3[47][0-9]{13}", "dc":"3(0[0-5][0-9]{11}|[68][0-9]{12})", "bl":"3(0[0-5][0-9]{11}|[68][0-9]{12})", "di":"6011[0-9]{12}", "jcb":"(3[0-9]{15}|(2131|1800)[0-9]{11})", "er":"2(014|149)[0-9]{11}"};
        if (ccType && dojo.lang.has(cardinfo, ccType.toLowerCase())) {
                return Boolean(value.match(cardinfo[ccType.toLowerCase()]));
        } else {
                for (var p in cardinfo) {
                        if (value.match("^" + cardinfo[p] + "$") != null) {
                                results.push(p);
                        }
                }
                return (results.length) ? results.join("|") : false;
        }
};
dojo.validate.isValidCvv = function (value, ccType) {
        if (typeof value != "string") {
                value = String(value);
        }
        var format;
        switch (ccType.toLowerCase()) {
          case "mc":
          case "ec":
          case "vi":
          case "di":
                format = "###";
                break;
          case "ax":
                format = "####";
                break;
          default:
                return false;
        }
        var flags = {format:format};
        if ((value.length == format.length) && (dojo.validate.isNumberFormat(value, flags))) {
                return true;
        }
        return false;
};