diff options
| author | Tristan Zur <tzur@web.web.ccwn.org> | 2014-03-27 22:27:47 +0100 |
|---|---|---|
| committer | Tristan Zur <tzur@web.web.ccwn.org> | 2014-03-27 22:27:47 +0100 |
| commit | b62676ca5d3d6f6ba3f019ea3f99722e165a98d8 (patch) | |
| tree | 86722cb80f07d4569f90088eeaea2fc2f6e2ef94 /js/dojo/dojox/validate/creditCard.js | |
Diffstat (limited to 'js/dojo/dojox/validate/creditCard.js')
| -rw-r--r-- | js/dojo/dojox/validate/creditCard.js | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/js/dojo/dojox/validate/creditCard.js b/js/dojo/dojox/validate/creditCard.js new file mode 100644 index 0000000..7b2d4c0 --- /dev/null +++ b/js/dojo/dojox/validate/creditCard.js @@ -0,0 +1,129 @@ +//>>built +define("dojox/validate/creditCard", ["dojo/_base/lang", "./_base"], function(lang, validate){ +/*===== + + dojox.validate.creditCard = { + // summary: + // Module provides validation functions for Credit Cards, using account number + // rules in conjunction with the Luhn algorigthm, with a plugable card info database. + }; + + validate = dojox.validate; + +=====*/ + +validate._cardInfo = { + // summary: A dictionary list of credit card abbreviations + // + // description: + // + // A hash of valid CC abbreviations and regular expressions + // + // mc: Mastercard + // ec: Eurocard + // vi: Visa + // ax: American Express + // dc: Diners Club + // bl: Carte Blanch + // di: Discover + // jcb: JCB + // er: Enroute + // + // example: + // Define your own card, gift-card, whatever. Starts with 7, + // is 15 total length. + // | dojo.mixin(dojox.validate._cardInfo, { + // | "my":"7[0-9]{14}" + // | }); + + '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}' +}; + +validate.isValidCreditCard = function(value, ccType){ + // summary: Validate a credit card number by type with Luhn checking. + // + // description: + // Checks if a credit card type matches the # scheme in a passed value, and if + // the Luhn checksum is accurate (unless its an Enroute card, in which case + // the checkSum is skipped), returning a Boolean to check against. + // + // value: String|Int + // A Value (credit card number) to validate + // + // ccType: String + // A credit-card abbreviation. + // + // example: + // | if(dojox.validate.isValidCreditCard("12345", "mc")){ + // | console.log('inconceivable'); + // | } + + return ((ccType.toLowerCase() == 'er' || validate.isValidLuhn(value)) && + validate.isValidCreditCardNumber(value, ccType.toLowerCase())); // Boolean +}; + +validate.isValidCreditCardNumber = function(value, ccType){ + // summary: + // Checks if value matches the pattern for that card or any card types if none is specified + // + // value: String|Int + // CC #, white spaces and dashes are ignored + // + // ccType: String? + // One of the abbreviation values in `dojox.validate._cardInfo` -- + // if Omitted, function returns a `|` delimited string of matching card types, + // or false if no matches found. + + value = String(value).replace(/[- ]/g,''); //ignore dashes and whitespaces + + var cardinfo = validate._cardInfo, results = []; + if(ccType){ + var expr = '^' + cardinfo[ccType.toLowerCase()] + '$'; + return expr ? !!value.match(expr) : false; // boolean + } + + for(var p in cardinfo){ + if(value.match('^' + cardinfo[p] + '$')){ + results.push(p); + } + } + return results.length ? results.join('|') : false; // String | boolean +}; + +validate.isValidCvv = function(/* String|Int */value, /* String */ccType) { + // summary: + // Validate the security code (CCV) for a passed credit-card type. + // + // description: + // + // value: + + if(!lang.isString(value)){ + value = String(value); + } + var format; + switch (ccType.toLowerCase()){ + case 'mc': + case 'ec': + case 'vi': + case 'di': + format = '###'; + break; + case 'ax': + format = '####'; + break; + } + + return !!format && value.length && validate.isNumberFormat(value, { format: format }); // Boolean +}; + +return validate; +}); |
