Inicio / Desarrollo web / Algoritmo de Luhn en PHP

Algoritmo de Luhn en PHP

El algoritmo de Luhn se usa para la verificación de números de identificación, como los números de las tarjetas de crédito (Visa, MasterCard) o el IMEI de los teléfonos móviles. Su creador fue Hans Peter Luhn, un científico de IBM.

Explicación

El último dígito del número es su dígito de control. Explicaremos el algoritmo de validación con un ejemplo.

Tenemos el número 49927398716.

  1. Multiplicamos por 2 los dígitos que ocupan las posiciones pares empezando por el final:
    (1×2) = 2, (8×2) = 16, (3×2) = 6, (2×2) = 4, (9×2) = 18
  2. Sumamos los dígitos que ocupaban las posiciones impares con los dígitos de los productos obtenidos:
    6 + (2) + 7 + (1+6) + 9 + (6) + 7 + (4) + 9 + (1+8) + 4 = 70
  3. Si el resto de dividir el total entre 10 es igual a cero, el número es correcto:
    70 mod 10 = 0

Algoritmo de Luhn

En la Wikipedia hay implementaciones en varios lenguajes para la verificación de estos números y una implementación en Java para el cálculo del dígito de control.

También dejo aquí una implementación en PHP para la verificación, bastante optimizada y reducida:

function luhn($number) {
  $odd = true;
  $sum = 0;

  foreach ( array_reverse(str_split($number)) as $num) {
	  $sum += array_sum( str_split(($odd = !$odd) ? $num*2 : $num) );
  }

  return (($sum % 10 == 0) && ($sum != 0));
}

Acerca de MasterGeek

José Antonio Ramírez # Ingeniero Técnico en Informática de Gestión # Fundador y administrador de nGeeks.com # Market Analyst en SocialRep

También puedes ver...

El HTC U11 es uno de los móviles más potentes del mercado y ahora con su nueva característica estará en el Top Ten

El procesador es el más potente de este año de Qualcomm, el Snapdragon 835, con …

4 Comentarios

  1. Muy claro la explicación del Algoritmo, estoy trabajando en una implementación similar. Tu implementación del algoritmo de Luhn en PHP quedo bastante simplificada, solo para ahorrarnos un nanosegundo podriamos hacer un corrimiento a la izquierda en lugar de multiplicar por 2.
    $sum += array_sum(str_split(($odd = !$odd) ? $num << 1 : $num));

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *