JavaScript card PAN check digit Luhn verification

2019-06-24 01:47发布

I've used the code from the link below to try and validate a credit card, however I'm not getting an alert when I submit a the wrong data in the field.

Strip spaces before performing Luhn check

my form is as follows:

<form id="myform" method="post" action=""> 

<p>Select credit card:
   <select tabindex="11" id="CardType"> 
      <option value="AmEx">American Express</option> 
    <option value="CarteBlanche">Carte Blanche</option> 
    <option value="DinersClub">Diners Club</option> 
    <option value="Discover">Discover</option> 
    <option value="EnRoute">enRoute</option> 
    <option value="JCB">JCB</option> 
    <option value="Maestro">Maestro</option> 
    <option value="MasterCard">MasterCard</option> 
    <option value="Solo">Solo</option> 
    <option value="Switch">Switch</option> 
    <option value="Visa">Visa</option> 
    <option value="VisaElectron">Visa Electron</option> 
    <option value="LaserCard">Laser</option> 
  </select> 
</p>

<p>
Enter number:
 <input type="text" id="CardNumber" maxlength="24" size="24" />
  <input type="submit" id="submitbutton" onsubmit="Validate(Luhn);" />  
</p> 

</form>

Maybe I'm using the wrong code?

2条回答
相关推荐>>
2楼-- · 2019-06-24 02:16

I came to this question looking for online card PAN validator in javascript that can be safely used to verify PAN check digit without risk of malicious intercept on server.

There are plenty of javascript Luhn implementations at http://rosettacode.org/wiki/Luhn_test_of_credit_card_numbers#JavaScript and https://sites.google.com/site/abapexamples/javascript/luhn-validation.

Here is typical implementation:

var LuhnCheck = (function()
{
    var luhnArr = [0, 2, 4, 6, 8, 1, 3, 5, 7, 9];
    return function(str)
    {
        var counter = 0;
        var incNum;
        var odd = false;
        var temp = String(str).replace(/[^\d]/g, "");
        if ( temp.length == 0)
            return false;
        for (var i = temp.length-1; i >= 0; --i)
        {
            incNum = parseInt(temp.charAt(i), 10);
            counter += (odd = !odd)? incNum : luhnArr[incNum];
        }
        return (counter%10 == 0);
    }
})();

And by googling for "luhn jsfiddle" I've found another ready to use robust online validator:

http://jsfiddle.net/silvinci/84bru/light/

查看更多
做个烂人
3楼-- · 2019-06-24 02:30

move onsubmit="Validate(Luhn);"

to the form tag and pass the form

Like this - note I pass the form and find the number from the form. I also moved the test and return false/return true around

http://jsfiddle.net/mplungjan/VqXss/

function Validate(theForm) {
  var Luhn = theForm.CardNumber.value;
  var LuhnDigit = parseInt(Luhn.substring(Luhn.length-1,Luhn.length));
  var LuhnLess = Luhn.substring(0,Luhn.length-1);
  if (Calculate(LuhnLess)!=parseInt(LuhnDigit)) {
    alert("\n\nYou have mis-typed your card number! \nPlease check and correct.\n\n")   
    return false;
  }
  return true;
}
</script>
</head>
<body>
<form id="myform" method="post" action="" onsubmit="return Validate(this)"> 
查看更多
登录 后发表回答