PHP : Проверка корректности номера кредитной карты
Номер каждой кредитной карты это непросто набор случайных цифр. Для создания номера используется специальный алгоритм — Алгоритм Луна.
Номер каждой кредитной карты это непросто набор случайных цифр.
Для создания номера используется специальный алгоритм — Алгоритм Луна. Это алгоритм вычисления контрольной цифры номера пластиковых карт в соответствии со стандартом ISO/IEC 7812. Он не является криптографическим средством, предназначение алгоритма в первую очередь — выявление ошибок, вызванных непреднамеренным искажением данных.
Алгоритм работы проверки корректности номера кредитной карты:
- Цифры проверяемой последовательности нумеруются справа налево.
- Цифры, оказавшиеся на нечётных местах, остаются без изменений.
- Цифры, стоящие на чётных местах, умножаются на 2.
- Если в результате такого умножения возникает число больше 9, оно заменяется суммой цифр получившегося произведения — однозначным числом, т. е. цифрой.
- Все полученные в результате преобразования цифры складываются. Если сумма кратна 10, то исходные данные верны.
<?php function is_valid_credit_card($s) { // оставить только цифры $s = strrev(preg_replace('/[^d]/','',$s)); // вычисление контрольной суммы $sum = 0; for ($i = 0, $j = strlen($s); $i < $j; $i++) { // использовать четные цифры как есть if (($i % 2) == 0) { $val = $s[$i]; } else { // удвоить нечетные цифры и вычесть 9, если они больше 9 $val = $s[$i] * 2; if ($val > 9) $val -= 9; } $sum += $val; } // число корректно, если сумма равна 10 return (($sum % 10) == 0); } if (! is_valid_credit_card('4111 1111 1111 1234')) { echo 'ошибка в номере'; } ?>