JavaScript card PAN check digit Luhn verification

五迷三道 提交于 2019-12-12 12:12:29

问题


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?


回答1:


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)"> 



回答2:


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/



来源:https://stackoverflow.com/questions/5869584/javascript-card-pan-check-digit-luhn-verification

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!