【问题标题】:Client-side validation of credit cards信用卡的客户端验证
【发布时间】:2008-11-01 02:58:27
【问题描述】:

有没有人有库或 JavaScript sn-p 在用户点击提交之前验证信用卡的校验位?

【问题讨论】:

  • 为什么要使用 javascript 来验证信用卡信息?
  • @gabriel1836,有一种算法可以让您知道信用卡数字是否在可接受的数字集中。这不是 100% 的确认,但您几乎可以排除所有随机错误。
  • 称为luhn-10算法
  • @Noah:因为这样你就可以提前通知用户他们输入卡号有误,让他们更容易纠正,而不是等待你的服务器端代码检查.

标签: javascript validation luhn


【解决方案1】:

jQuery Validation Plugin 有一个method 用于验证信用卡号。

还有其他具体的脚本:

他们中的大多数使用Luhn algorithm

【讨论】:

    【解决方案2】:

    可能 OP 甚至不再关注此线程,但这可能对其他人有帮助:

    http://jquerycreditcardvalidator.com

    它检查卡片类型,验证其长度并使用 Luhn 算法检查 mod 10。

    【讨论】:

      【解决方案3】:

      您可以使用此 sn-p 验证 16 位数的卡号 Luhn algorithm

      function validateCardNumber(number) {
          var regex = new RegExp("^[0-9]{16}$");
          if (!regex.test(number))
              return false;
      
          return luhnCheck(number);
      }
      
      function luhnCheck(val) {
          var sum = 0;
          for (var i = 0; i < val.length; i++) {
              var intVal = parseInt(val.substr(i, 1));
              if (i % 2 == 0) {
                  intVal *= 2;
                  if (intVal > 9) {
                      intVal = 1 + (intVal % 10);
                  }
              }
              sum += intVal;
          }
          return (sum % 10) == 0;
      }
      

      【讨论】:

        【解决方案4】:

        Luhn 算法(也称为Luhn formula)可用于验证各种识别号码(例如信用卡号码IMEI)。

        我省略了算法的解释,因为它已经被别人公开了,但是如果你需要最快的Javascript实现,你可以看到它here

        简单地说……

        function luhn(array) {
          return function (number) {
            let len = number ? number.length : 0,
              bit = 1,
              sum = 0;
        
            while (len--) {
              sum += !(bit ^= 1) ? parseInt(number[len], 10) : array[number[len]];
            }
            return sum % 10 === 0 && sum > 0;
          };
        }([0, 2, 4, 6, 8, 1, 3, 5, 7, 9]);
        

        请注意,链接源是 ES6 语言(也称为 JavaScript 2015),但在 ES5 中转译(请参阅index.js),并且经过全面单元测试.

        此外,它可以在 browsers 和/或 node.js 中使用。

        基准测试和其他实现在jsperf 上验证其高性能。

        现在,如果您只是想使用它,请从链接的repository 中获取代码。

        否则通过bower 安装它...

        bower install luhn-alg
        

        或通过npm ...

        npm install luhn-alg
        

        免责声明:我是luhn-alg 包的作者。

        【讨论】:

          【解决方案5】:

          如果您还没有使用 jQuery 插件,您可以使用此功能。它基于 Luhn 算法,可以容忍空格或破折号,因此应该适用于您需要它的大多数数据输入案例。

          http://af-design.com/blog/2010/08/18/validating-credit-card-numbers/

          【讨论】:

            【解决方案6】:

            Luhn formula 是信用卡验证中最流行的算法。不要害怕algorithm 这个词,以至于您正在寻找图书馆。这非常容易理解。根据维基百科的描述,这个算法可以分为 3 个步骤:

            • 从最右边的数字(即校验位)开始,向左移动,每隔一个数字加一倍;如果这个产品 加倍运算大于 9(例如,8 × 2 = 16),然后将 产品的位数(例如,16:1 + 6 = 7、18:1 + 8 = 9)。
            • 取所有数字的总和。
            • 如果总计模 10 等于 0(如果总计以 0 结尾)则根据 Luhn 公式该数字有效;否则不是 有效。

            这是我的工作草稿。

            function luhn(anum){
                anum = anum+'';
                var sum = 0,
                    max = anum.length - 1;
                //From the rightmost digit, which is the check digit, moving left
                for(var j=max;j>=0;j--){
                    var digit = parseInt(anum[j]);
                    //Take the sum of all the digits
                    if((max - j) & 1){
                        //double the value of every second digit
                        var add = digit * 2;
                        //if the product of this doubling operation is greater than 9 ,
                        //then sum the digits of the products
                        sum += add < 10 ? add : 1 + add % 10;
                    }else{
                        sum += digit;
                    }
                }
                //If the total modulo 10 is equal to 0 (if the total ends in zero)
                //then the number is valid according to the Luhn formula;else it is not valid.
                return sum % 10 === 0;
            }
            
            luhn(79927398713) -> true
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2023-03-29
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-02-19
              • 1970-01-01
              相关资源
              最近更新 更多