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 превентивную проверку введенных данных на клиентской стороне.

Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Добавить в закладки Memori Добавить в закладки Google
Просмотров: 14803 | Комментариев: 0

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

Комментарии

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

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

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