diff options
Diffstat (limited to 'includes/js/dojox/validate/creditCard.js')
-rw-r--r-- | includes/js/dojox/validate/creditCard.js | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/includes/js/dojox/validate/creditCard.js b/includes/js/dojox/validate/creditCard.js new file mode 100644 index 0000000..903aab1 --- /dev/null +++ b/includes/js/dojox/validate/creditCard.js @@ -0,0 +1,92 @@ +if(!dojo._hasResource["dojox.validate.creditCard"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojox.validate.creditCard"] = true; +dojo.provide("dojox.validate.creditCard"); + +dojo.require("dojox.validate._base"); + +/* + Validates Credit Cards using account number rules in conjunction with the Luhn algorigthm + + */ + +dojox.validate.isValidCreditCard = function(/*String|Int*/value, /*String*/ccType){ + //Summary: + // checks if ccType matches the # scheme in value, and if Luhn checksum is accurate (unless its an Enroute card, the checkSum is skipped) + + //Value: Boolean + return ((ccType.toLowerCase() == 'er' || dojox.validate.isValidLuhn(value)) && + dojox.validate.isValidCreditCardNumber(value,ccType.toLowerCase())); //Boolean +} + +dojox.validate.isValidCreditCardNumber = function(/*String|Int*/value,/*String?*/ccType){ + // summary: + // checks if value matches the pattern for that card or any card types if none is specified + // + // value: Boolean + // CC #, white spaces and dashes are ignored + // + // ccType: String? + // one of the values in cardinfo -- if Omitted it it returns a | delimited string of matching card types, or false if no matches found + + value = String(value).replace(/[- ]/g,''); //ignore dashes and whitespaces + + /* FIXME: not sure on all the abbreviations for credit cards,below is what each stands for atleast to my knowledge + mc: Mastercard + ec: Eurocard + vi: Visa + ax: American Express + dc: Diners Club + bl: Carte Blanch + di: Discover + jcb: JCB + er: Enroute + */ + 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){ + var expr = cardinfo[ccType.toLowerCase()]; + return expr ? !!(value.match(cardinfo[ccType.toLowerCase()])) : false; // boolean + } + var results=[]; + for(var p in cardinfo){ + if(value.match('^'+cardinfo[p]+'$')){ + results.push(p); + } + } + return results.length ? results.join('|') : false; // string | boolean +} + +dojox.validate.isValidCvv = function(/*String|Int*/value, /*String*/ccType) { + //Summary: + // returns true if the security code (CCV) matches the correct format for supplied ccType + + //Value: Boolean + + 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; //Boolean + } + var flags = {format:format}; + //FIXME? Why does isNumberFormat take an object for flags when its only parameter is either a string or an array inside the object? + //FIXME: um... just check value.length? + return (value.length == format.length && dojox.validate.isNumberFormat(value, flags)); //Boolean +} + +} |