2008-11-01 11 views
10

Czy ktoś ma biblioteki lub fragment kodu JavaScript, aby zatwierdzić cyfrę kontrolną kart kredytowych, zanim użytkownik kliknie Prześlij?po stronie klienta walidacji kart kredytowych

+0

Dlaczego chciałbyś używać javascript do weryfikowania informacji o karcie kredytowej? –

+2

@ gabriel1836, istnieje algorytm, który pozwala sprawdzić, czy cyfry karty kredytowej znajdują się w zestawie dopuszczalnych cyfr. Nie jest to potwierdzenie w 100%, ale wykluczysz prawie wszystkie przypadkowe błędy. – torial

+0

To się nazywa algorytm luhn-10. – mdec

Odpowiedz

10

Prawdopodobnie PO nawet nie śledzić ten wątek już, ale może to być przydatne dla kogoś innego:

http://jquerycreditcardvalidator.com

sprawdza rodzaj karty, sprawdza jego długość i czeki dla mod 10 z algorytmem Luhna.

7

Można użyć tego fragmentu kodu do sprawdzania poprawności numerów kart 16 cyfr z 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; 
} 
1

Luhn formula to najpopularniejszy algorytm walidacji karty kredytowej. I nie bój się słowa "algorithm", że szukasz biblioteki. Jest to niezwykle łatwe do zrozumienia. Z opisu Wikipedia, algorytm ten może być przepaści w 3 krokach:

  • z pierwszej z prawej strony cyfrę, która jest cyfrą kontrolną, poruszając się w lewo, podwójna wartość każdej drugiej cyfry; Jeżeli wynik tego podwojenie operacji jest większa niż 9 (na przykład, 8 x 2 = 16), przy czym suma tych cyfry produktów (na przykład 16: 1 + 6 = 7, 18: 1 + 8 = 9).
  • Weź sumę wszystkich cyfr.
  • Jeżeli całkowita modulo 10 jest równe 0 (jeśli całkowite wylewce zera), wtedy numer jest poprawny według wzoru Luhna; w przeciwnym razie nie jest ważne.

Oto mój projekt roboczy.

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 
3

Luhna algorytmie (znanym również jako Luhn formula) jest przydatny do sprawdzania różnych numerach identyfikacyjnych (na przykład numer karty kredytowej , IMEI).

Pomijam wyjaśnienie algorytmu, ponieważ zostało już ono wystawione przez innych, ale jeśli potrzebujesz najszybszej implementacji JavaScript, możesz to zobaczyć here.

Mówiąc prościej ...

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]); 

Zauważ, że źródło jest połączone w ES6 języku (znany również jako JavaScript 2015), ale jest transpiled w ES5 (patrz index.js) i jest w pełni jednostka przetestowany.

Ponadto jest on dostępny zarówno w przeglądarkach i/lub node.js.

Benchmarki i inne implementacje są na jsperf, aby sprawdzić ich wysoką wydajność.

Teraz, jeśli chcesz go użyć, pobierz kod z połączonego repository.

Inaczej go zainstalować poprzez bower ...

bower install luhn-alg 

Albo poprzez npm ...

npm install luhn-alg 

Zastrzeżenie: Jestem autorem pakietu luhn-alg.

Powiązane problemy