UNPKG

@neblartechnologies/descardid

Version:

DesCardId (of Card Identification) is a php library used for identifying credit card numbers in text.

10 lines 8.07 kB
/** * DesCardId * DesCardId (of Card Identification) is a php library used for identifying credit card numbers in text. * @version v1.0.0 * @since December 26, 2017 * @link http://neblar.com * @copyright 2017 Neblar Technologies * @license MIT */ "use strict";function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function t(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,i,n){return i&&t(e.prototype,i),n&&t(e,n),e}}(),ValidationConstants=function t(){_classCallCheck(this,t),this.MIN_POSSIBLE_LENGTH=7,this.MAX_POSSIBLE_LENGTH=19,this.PROBABILITIES_LENGTH={16:100,15:100,13:80},this.PROBABILITIES_REGEX_PROVIDERS={"^(5[1-5][0-9]{5,}|222[1-9][0-9]{3,}|22[3-9][0-9]{4,}|2[3-6][0-9]{5,}|27[01][0-9]{4,}|2720[0-9]{3,})":100,"^(3[47][0-9]{5,})":70,"^(4[0-9]{6,})":50,"^(3(?:0[0-5]|[68][0-9])[0-9]{4,})":85,"^(6(?:011|5[0-9]{2})[0-9]{3,})":80,"^((?:2131|1800|35[0-9]{3})[0-9]{3,})":85},this.KNOWN_TEST_NUMBERS=["378282246310005","371449635398431","345436849253786","344343597098739","348195053148184","346761128958196","379983963916986","376749501879009","349204254634213","376432510463566","378734493671000","5610591081018250","30569309025904","38520000023237","30467323783394","30389589049437","30213469782901","36197365718891","36823785024749","36251701871102","5485157059278227","5418199988362484","5402093870675764","6011111111111117","6011000990139424","6011540018341759","6011052057723921","6011277618211484585","6011861286835722","6011890376173660","6011464247892518","6011244758428047","6011469345729306","6382961806046593","6373413397497463","6375275217437369","3530111333300000","3566002020360505","3566111111111113","3529844470994754","3535754231437369","3541031337467299722","6762678941084830","5018131548158304","6304521934333993","50339619890917","586824160825533338","6759411100000008","6759560045005727054","5641821111166669","5555555555554444","5105105105105100","2222420000001113","2222630000001125","5246772059242294","5365643412360922","5310506475502852","5192310560826646","5174224924081487","5353732311938484","5203246075883952","5186682476306626","4111111111111111","4012888888881881","4222222222222","4330954187429262","4916861873042626","4024007176658892119","4485992558886887","4556556689853209","4532379342751077","4024007153524987","4485643204102613","4508138079686538","4026207140510119","4508608593847550","5019717010103742","6331101999990016","135412345678911"]},ValidationFunctions=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;_classCallCheck(this,t),this.constants=null===e?new ValidationConstants:e}return _createClass(t,[{key:"validateKnownTestNumbers",value:function(t){return-1!==this.constants.KNOWN_TEST_NUMBERS.indexOf(t)}},{key:"validateLength",value:function(t){var e=t.length;return this.constants.PROBABILITIES_LENGTH.hasOwnProperty(e)?this.constants.PROBABILITIES_LENGTH[e]:0}},{key:"validateLUHN",value:function(t){var e=0,i=t.length,n=parseInt(t[i-1]);t=t.substr(0,i-1),t=this.reverseString(t);for(var a=0;a<i-1;a++){var r=parseInt(t[a]);a%2==0&&(r*=2)>9&&(r-=9),e+=r}return(e+n)%10==0}},{key:"validatePossibility",value:function(t){if(!1===(!isNaN(parseFloat(t))&&isFinite(t)))return!1;var e=t.length;return!(e<this.constants.MIN_POSSIBLE_LENGTH)&&!(e>this.constants.MAX_POSSIBLE_LENGTH)}},{key:"validateProvider",value:function(t){var e=this.constants.PROBABILITIES_REGEX_PROVIDERS;for(var i in e)if(e.hasOwnProperty(i)&&new RegExp(i).test(t))return e[i];return 0}},{key:"reverseString",value:function(t){for(var e=t.length-1,i="";e>=0;)i+=t[e--];return i}}]),t}(),CardNumberValidator=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;_classCallCheck(this,t),this.DEFAULT_THRESHOLD=85,this.probabilities=null===e?{LUHN:60,TEST_NUMBERS:100,PROVIDERS:15,LENGTH:15}:e,this.validator=null===i?new ValidationFunctions:new ValidationFunctions(i)}return _createClass(t,[{key:"calculateProbabilityOfBeingACreditCard",value:function(t){var e=0;return this.validator.validateKnownTestNumbers(t)&&(e+=this.probabilities.TEST_NUMBERS),this.validator.validateLUHN(t)&&(e+=this.probabilities.LUHN),e+=this.validator.validateProvider(t)*(this.probabilities.PROVIDERS/100),e+=this.validator.validateLength(t)*(this.probabilities.LENGTH/100)}},{key:"isPossibleToBeACreditCard",value:function(t){return this.validator.validatePossibility(t)}},{key:"isSurelyACreditCardNumber",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;null===e&&(e=this.DEFAULT_THRESHOLD);return this.calculateProbabilityOfBeingACreditCard(t)>e}},{key:"setProbabilities",value:function(t){var e=this.probabilities;for(var i in t)if(t.hasOwnProperty(i)){if(!(i in this.probabilities))return this.probabilities=e,!1;this.probabilities[i]=t[i]}return!0}}]),t}(),TextManipulator=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;_classCallCheck(this,t),this.maxCardLength=null===e?20:e,this.minCardLength=null===i?7:i}return _createClass(t,[{key:"extractNumberFromText",value:function(t){var e=t.replace(new RegExp("[^0-9]","g"),"");return 0===e.length?null:e}},{key:"getContinuousNumbers",value:function(t){return t.match(new RegExp("([0-9]+)","g"))}},{key:"getDiscontinuousNumbers",value:function(t){return t.match(new RegExp("([0-9]+(((?![a-zA-Z]))([^a-zA-Z]+))[0-9])","g"))}},{key:"getSuspectedFragments",value:function(t,e){var i=void 0;switch(e){case 2:i=this.getDiscontinuousNumbers(t);break;case 1:default:i=this.getContinuousNumbers(t)}return null===i?[]:i.filter(function(t,e,i){return e===i.indexOf(t)})}},{key:"markFragment",value:function(t,e,i){if(""===e)return t;var n="{{"+e+"}["+i+"]}";return t.replace(new RegExp(e,"g"),n)}}]),t}(),CardIdentifier=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,l=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null,o=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,u=arguments.length>8&&void 0!==arguments[8]?arguments[8]:null;_classCallCheck(this,t),this.alert=null===a?"ALERT":a,this.checkLevel=null===n?2:n,this.notice=null===r?"NOTICE":r,this.textManipulator=new TextManipulator(l,s),this.thresholdAlert=e,this.thresholdNotice=i,this.validator=new CardNumberValidator(o,u)}return _createClass(t,[{key:"inspectText",value:function(t){for(var e=this.textManipulator.getSuspectedFragments(t,this.checkLevel),i=0;i<e.length;i++){var n=this.textManipulator.extractNumberFromText(e[i]);null!==n&&this.validator.isPossibleToBeACreditCard(n)&&this.validator.isSurelyACreditCardNumber(n,this.thresholdAlert)&&(t=this.textManipulator.markFragment(t,e[i],this.alert))}return t}},{key:"inspectTextWithNotices",value:function(t){for(var e=this.textManipulator.getSuspectedFragments(t,this.checkLevel),i=0;i<e.length;i++){var n=this.textManipulator.extractNumberFromText(e[i]);if(null!==n&&this.validator.isPossibleToBeACreditCard(n)){var a=this.validator.calculateProbabilityOfBeingACreditCard(n);null===this.thresholdAlert||a>this.thresholdAlert?t=this.textManipulator.markFragment(t,e[i],this.alert):(null===this.thresholdNotice||a>this.thresholdNotice)&&(t=this.textManipulator.markFragment(t,e[i],this.notice))}}return t}}]),t}();exports.ValidationConstants=ValidationConstants,exports.ValidationFunctions=ValidationFunctions,exports.CardNumberValidator=CardNumberValidator,exports.TextManipulator=TextManipulator,exports.CardIdentifier=CardIdentifier;