Credit Card validation (v2)

Revision 2 of this benchmark created on


Description

Compare Credit Card validation with luhn algorithm

Setup

//http://www.notesbit.com/index.php/web-mysql/web-scripts/luhn-algorithm-for-credit-card-check-using-javascript/
    
    
    function isCreditCard(CC) {
      if (CC.length > 19) return (false);
    
      sum = 0;
      mul = 1;
      l = CC.length;
      for (i = 0; i < l; i++) {
        digit = CC.substring(l - i - 1, l - i);
        tproduct = parseInt(digit, 10) * mul;
        if (tproduct >= 10) sum += (tproduct % 10) + 1;
        else sum += tproduct;
        if (mul == 1) mul++;
        else mul--;
      }
      if ((sum % 10) == 0) return (true);
      else return (false);
    }
    
    
    // http://imei.sms.eu.sk/
    // Javascript code copyright 2009 by Fiach Reid : www.webtropy.com
    // This code may be used freely, as long as this copyright notice is intact.
    
    
    function Calculate(Luhn) {
      var sum = 0;
      for (i = 0; i < Luhn.length; i++) {
        sum += parseInt(Luhn.substring(i, i + 1));
      }
      var delta = new Array(0, 1, 2, 3, 4, -4, -3, -2, -1, 0);
      for (i = Luhn.length - 1; i >= 0; i -= 2) {
        var deltaIndex = parseInt(Luhn.substring(i, i + 1));
        var deltaValue = delta[deltaIndex];
        sum += deltaValue;
      }
      var mod10 = sum % 10;
      mod10 = 10 - mod10;
      if (mod10 == 10) {
        mod10 = 0;
      }
      return mod10;
    }
    
    function Validate(Luhn) {
      var LuhnDigit = parseInt(Luhn.substring(Luhn.length - 1, Luhn.length));
      var LuhnLess = Luhn.substring(0, Luhn.length - 1);
      if (Calculate(LuhnLess) == parseInt(LuhnDigit)) {
        return true;
      }
      return false;
    }
    
    
    
    
    
    
    
    //http://www.brainjar.com/js/validation/default2.asp
    
    
    function checkCC(s) {
    
    
    
      var i, n, c, r, t;
    
    
    
      // First, reverse the string and remove any non-numeric characters.
    
    
      r = "";
    
      for (i = 0; i < s.length; i++) {
    
        c = parseInt(s.charAt(i), 10);
    
        if (c >= 0 && c <= 9)
    
        r = c + r;
    
      }
    
    
    
      // Check for a bad string.
    
    
      if (r.length <= 1)
    
      return false;
    
    
    
      // Now run through each single digit to create a new string. Even digits
      // are multiplied by two, odd digits are left alone.
    
    
      t = "";
    
      for (i = 0; i < r.length; i++) {
    
        c = parseInt(r.charAt(i), 10);
    
        if (i % 2 != 0)
    
        c *= 2;
    
        t = t + c;
    
      }
    
    
    
      // Finally, add up all the single digits in this string.
    
    
      n = 0;
    
      for (i = 0; i < t.length; i++) {
    
        c = parseInt(t.charAt(i), 10);
    
        n = n + c;
    
      }
    
    
    
      // If the resulting sum is an even multiple of ten (but not zero), the
      // card number is good.
    
    
      if (n != 0 && n % 10 == 0)
    
      return true;
    
      else return false;
    
    }
    
    function ccMod10(ccNum){
                ccNum=ccNum+''; //Convert cc number to string
                var ccLen=ccNum.length;  //Length of CC Number
                var cnt; /* a counter */
                var weight=2; /* weight to apply to digit being checked */
                var sum=0; /* sum of weights */
                var digit; /* digit being checked */
                var mod;
                /* compute the sum */
                for (cnt = ccLen -1; cnt>=0; cnt=cnt-1){
                        digit = weight * (ccNum.charAt(cnt-1));
                        /* add both the tens digit and the ones digit to the sum */
                        sum = sum + parseInt(digit / 10) + (digit % 10);
                        if (weight == 2)
                                weight =1;
                        else
                                weight = 2;
                }
                /* subtract the ones digit of the sum from 10 and return the ones digit of that result */
                mod = (10-sum%10)%10;
                mod=(mod==(ccNum.substring(ccLen-1))*1);
                return (mod);
        }

Test runner

Ready to run.

Testing in
TestOps/sec
notesbit
isCreditCard("4984421209470251");
ready
webtropy
Validate("4984421209470251");
ready
brainjar
checkCC("4984421209470251");
ready
Keck
ccMod10("4984421209470251");
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.