2008-11-01 17 views
10

¿Alguien tiene una biblioteca o un fragmento de JavaScript para validar el dígito de verificación de las tarjetas de crédito antes de que el usuario acceda a Enviar?Validación del lado del cliente de las tarjetas de crédito

+0

¿Por qué querrías usar javascript para verificar la información de la tarjeta de crédito? –

+2

@ gabriel1836, hay un algoritmo que le permite saber si los dígitos de la tarjeta de crédito están en el conjunto de dígitos aceptables. No es una confirmación del 100%, pero descarta casi todos los errores aleatorios. – torial

+0

Se llama algoritmo luhn-10 – mdec

Respuesta

10

Probablemente OP ni siquiera siguen este hilo más, pero esto puede ser útil para otra persona:

http://jquerycreditcardvalidator.com

comprueba el tipo de tarjeta, valida su longitud y comprueba si hay mod 10 con el algoritmo Luhn.

7

Puede utilizar este fragmento para validar números de tarjeta de 16 dígitos con 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 es el algoritmo más popular en la validación de tarjetas de crédito. Y no tengas tanto miedo de la palabra algorithm que estás buscando una biblioteca. Es increíblemente fácil de entender. Por la descripción de Wikipedia, este algoritmo puede ser dividir en 3 etapas:

  • desde el dígito más a la derecha, que es el dígito de control, mueve a la izquierda, el doble del valor de cada segundo dígito; si el producto de esta operación de duplicación es mayor que 9 (p. ej., 8 × 2 = 16), sume los dígitos de los productos (p. ej., 16: 1 + 6 = 7, 18: 1 + 8 = 9).
  • Tome la suma de todos los dígitos.
  • Si el módulo total 10 es igual a 0 (si el total termina en cero), entonces el número es válido según la fórmula de Luhn; de lo contrario, no es válido.

Aquí está mi borrador de trabajo.

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

algoritmo de Luhn (también conocido como Luhn formula) es útil para validar una variedad de números de identificación (por ejemplo números de tarjetas de crédito, IMEI).

Omito la explicación del algoritmo, ya que ya ha sido expuesto por los demás, pero si necesita la más rápida implementación de JavaScript, se puede ver que here.

En pocas palabras ...

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

Nota que unía fuente está en ES6 idioma (conocidos como JavaScript 2015), pero se transpiled en ES5 (ver index.js) y es totalmente unidad probado

Además, es utilizable tanto en navegadores y/o node.js.

Benchmarks y otra implementación están en jsperf para verificar sus altos rendimientos.

Ahora, si simplemente desea utilizarlo, tome el código del repository vinculado.

De lo contrario instalarlo a través de bower ...

bower install luhn-alg 

O vía npm ...

npm install luhn-alg 

responsabilidad: yo soy el autor del paquete luhn-alg.

Cuestiones relacionadas