Blog. Just Blog

Проверка корректности номера банковской карты

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Web-мастеру и не только | Автор: ManHunter
Проверка корректности номера банковской карты
Проверка корректности номера банковской карты

Для проверки корректности номера банковской карты используется алгоритм, разработанный еще в 1954 году Гансом Питером Луном, сотрудником фирмы IBM. Этот алгоритм очень прост в реализации на различных языках программирования, и, хоть он не дает 100% гарантии от преднамеренного искажения данных, может легко выявить случайные ошибки при вводе.

Для одного из рабочих проектов мне потребовалось реализовать проверку корректности введенного номера банковской карты, вот что у меня получилось на PHP:
  1. //----------------------------------------------------------------------
  2. // Проверка корректности номера банковской карты по алгоритму Луна
  3. //----------------------------------------------------------------------
  4. // 1. Цифры проверяемой последовательности нумеруются справа налево.
  5. // 2. Цифры, оказавшиеся на нечетных местах, остаются без изменений.
  6. // 3. Цифры, стоящие на четных местах, умножаются на 2.
  7. // 4. Если в результате такого умножения возникает число больше 9,
  8. //    оно заменяется суммой цифр получившегося произведения -
  9. //    однозначным числом, то есть цифрой.
  10. // 5. Все полученные в результате преобразования цифры складываются.
  11. //    Если сумма кратна 10, то исходные данные верны.
  12. //----------------------------------------------------------------------
  13. function check_card_number($str) {
  14.     $str=strrev(preg_replace('/[^0-9]/','',$str));
  15.     $chk=0;
  16.     for ($i=0$i<strlen($str); $i++) {
  17.         $tmp=intval($str[$i])*(1+$i%2);
  18.         $chk+=$tmp-($tmp>9?9:0);
  19.     }
  20.     return !($chk%10);
  21. }
Примеры использования функции проверки. Проверку проходят номера карт Visa, MasterCard и Maestro. По идее, номера карт других систем также должны обрабатываться корректно, так как именно алгоритм Луна является стандартом для всех пластиковых карт. Все тестовые номера банковских карт найдены в интернете.
  1. check_card_number('4276 8770 1103 5748'); // true
  2. check_card_number('4346-7820-0751-9190'); // true
  3. check_card_number('67619600 0029070555'); // true
  4. check_card_number('67619600 0000551045'); // true
  5. check_card_number('63900238 9016596165'); // true
  6. check_card_number('1234 5678 1234 5678'); // false
Приведенную функцию можно без особого труда перевести на другие языки программирования, например, сделать на JavaScript превентивную проверку введенных данных на клиентской стороне.

Поделиться ссылкой ВКонтакте
Просмотров: 15197 | Комментариев: 0

Метки: PHP
Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
Комментариeв нет

Добавить комментарий

Заполните форму для добавления комментария
Комментарии отключены администратором сайта
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0059 сек.) / Память: 4.5 Mb
Наверх