2017-08-25 8 views
-4

luhnアルゴリズムを使用してクレジットカードの有効性を確認するための入力があります。 Luhnの機能は彼の仕事を行い、それは私のクレジットカード番号を首尾良く検証します。クレジットカード入力形式Javascript

しかし、ユーザーの入力タイプを6703 0000 0000 0000 0(最大17桁)の形式にしたいとします。私はこのスクリプトを持っていますが、Luhn関数を実行すると、クレジットカードが6703(SPACE)0000(SPACE)0000(SPACE)0000(SPACE)0として読み込まれるため、すべてのクレジットカードが無効です。それは非常にイライラする問題です。そして、私はこれのための任意の回避策を見つけることができません。

数字の書式設定を変更する必要がありますか?または、luhn関数のスクリプトを変更する必要がありますか?

入力タイプ:

   <input type="text" name="credit-card-number" id="credit-card" placeholder="Enter your credit card number here" autocorrect="off" oninput="myFunction()" autocapitalize="off" maxlength="42" size="42" ng-maxlength="17" required="required" /> 

CC形式:

function cc_format(value) { 
     var v = value.replace(/\s+/g, '').replace(/[^0-9]/gi, '') 
     var matches = v.match(/\d{4,17}/g); 
     var match = matches && matches[0] || '' 
     var parts = [] 
     for (i = 0, len = match.length; i < len; i += 4) { 
      parts.push(match.substring(i, i + 4)) 
     } 
     if (parts.length) { 
      return parts.join(' ') 
     } else { 
      return value 
     } 
    } 

    onload = function() { 
     document.getElementById('credit-card').oninput = function() { 
      this.value = cc_format(this.value) 
     } 
    } 

のLuhn機能:

$(document).ready(function() { 
     $('#credit-card-entry-form').submit(function(e) { 
      e.preventDefault(); 
      var creditCardNumber = $('input[name="credit-card-number"]').val(); 

      is_luhn_valid(creditCardNumber); 
     }); 
    }); 


    //validate checker 
    var luhnChk = (function(arr) { 
     return function(ccNum) { 
      var 
       len = ccNum.length, 
       bit = 1, 
       sum = 0, 
       val; 

      while (len) { 
       val = parseInt(ccNum.charAt(--len), 10); 
       sum += (bit ^= 1) ? arr[val] : val; 
      } 

      return sum && sum % 10 === 0; 
     }; 
    }([0, 2, 4, 6, 8, 1, 3, 5, 7, 9])); 

    function is_luhn_valid(cardNumber) { 
     if (luhnChk(cardNumber) === true) { 
      $('#err').hide(); 
      $('#suc').show(); 
      document.getElementById("credit-card").style.borderColor = '#00a160'; 
      alert("Credit card number is valid."); 
     } else { 
      $('#err').show(); 
      $('#suc').hide(); 
      document.getElementById("credit-card").style.borderColor = '#FF6C60'; 
      alert("Credit card number is invalid."); 

     } 
    } 
+0

したがって、あなたのフォーマットされたカード番号をLuhn関数に渡す前に、それからすべてのスペースを取り除くだけです。あなたの書式設定機能のように。 –

+0

フィールドなどを区切っても機能しませんか?必要な検証フォーマットのための隠れたものと表示フォーマットのための目に見えるもの表示と機能はどちらかとして分離しておく必要があります。 – Nope

答えて

0

クレジットを含む、あなたの文字列に空白スペースを削除するには、次の行を使用してくださいカード番号:

str = creditCardNumber.replace(/\s/g, ''); 
+0

Thx!シンプルでクリーンなソリューション:) – SecurG