Алгоритм Луна или Верхоффа для номеров кредитных карт - PullRequest
7 голосов
/ 24 ноября 2011

Прежде всего, я не совсем уверен, должно ли это быть в стеке, но я подумал, что все равно попытаюсь спросить.

В прошлом я всегда использовал алгоритм Луна для проверки ошибок в кредитномера карт, но сегодня я подумал, что я буду реализовывать алгоритм verhoeff в php, главным образом, чтобы убить время.

Я проверил его на своих собственных номерах карт, и он работал нормально, что заставило меня задуматься о том, стоит ли мне использоватьverhoeff over luhn для проверки номера моей кредитной карты в будущем.

Теперь мои вопросы:

Будет ли какое-либо существенное преимущество в использовании verhoeff по сравнению с luhn?

Я знаю, что verhoeff немного сложнее в своей реализации и может обнаруживать больше ошибок транскрипции, чем luhn, что, естественно, привело бы меня к мысли, что это немного медленнее, но помимо преимущества обнаружения большего количества ошибок транскрипции иПреимущество (если это можно так назвать) быть немного медленнее, я не могу думать ни о какомдругие реальные отличия.

Будет ли алгоритм verhoeff работать для всех основных карт?

Я знаю, что Luh будет работать для всех основных карт, но Verhoeff также будет работать длявсе они?Я предполагаю, что это будет работать для всех из них, но я подумал, что должен все равно проверить.

Есть ли причина, по которой я видел только людей, использующих luhn для проверки номеров кредитных карт?

За все время моей работы в качестве разработчика я действительно видел людей, использующих алгоритм luhn для проверки номеров кредитных карт.Есть ли для этого веская причина, или просто Лон более известна?

Любая помощь будет признательна, спасибо за ваше время.

1 Ответ

9 голосов
/ 24 ноября 2011

Это разные алгоритмы и они могут давать разные результаты (если бы результаты всегда были одинаковыми, то они были бы равны по мощности - вы уже говорили, что Верхофф был сильнее, поэтому вы должны согласиться, что есть некоторые числа, которые дают разные значения Лун!).

При использовании с кредитной картой вы проверяете последнюю цифру по отношению к остальной части номера. Эта контрольная цифра присутствует на карте (поэтому она исправлена) и рассчитывается по алгоритму Луна.

Таким образом, вы не можете использовать Verhoeff, потому что последняя цифра на кредитной карте для Луна. Чтобы использовать Verhoeff вместо этого, вам придется изменить последнюю цифру (некоторых) уже существующих карт.

Люди, которые разработали оригинальный формат кредитной карты, имели этот выбор (по модулю исторических деталей) и решили пойти с Луном. Они выбирают. Вы не можете изменить их решение задним числом, потому что контрольная цифра Luhn присутствует на существующих карточках.

(Понятия не имею, как вам удалось проверить свои карты с помощью этого алгоритма. Эфир, вам повезло, или ваш код сломан, или я ошибаюсь ...)

Проще говоря: это не будет работать. Они не совпадают, и выбор Luhn был сделан эмитентом кредитной карты.

В более сложных терминах: если бы они были совместимы, то они были бы равны по мощности и не было бы никакого смысла в переключении. Вы не можете иметь две контрольные суммы разной мощности, которые дают одинаковые результаты. Это тонкий момент, но подумайте над этим ...

...