Вы могли бы пройти долгий путь, не предполагая, что первое число правильное.В настоящее время кому-то, кто опечатывает самое первое число своей визы как 3
вместо 4
, говорят, что они вводят недействительный American Express.Это жестоко с точки зрения юзабилити.Если номер кредитной карты недействителен, он просто недействителен.Это не недействительный American Express, если только явно не выберет American Express из другого раскрывающегося списка.
Кроме того небольшого улучшения, то, о чем вы просите, невозможно.Алгоритм контрольной суммы mod10 не может сказать вам, какая цифра неверна.
Чтобы попытаться объяснить, почему, рассмотрим следующий упрощенный сценарий:
- У меня есть 5 цифр, я незнать, что они есть
- Сумма из 5 цифр равна 50
- Одна из следующих цифр не соответствует единице
Какая из следующих цифр являетсяневерно?
9 + 11 + 8 + 9 + 12 = 49
Невозможно сказать .Это может быть любая из этих цифр, любая из них может быть отключена на -1.Но это не начинает описывать нашу проблему.Я сказал вам, что неверна только одна цифра.В вашей ситуации вы не знаете, сколько ошибаетесь.Одна цифра может быть выключена на -2, а другая картинка может быть выключена на +1.Буквально бесконечное количество «неправильных» состояний.Возможно, все пять чисел неверны!Возможно правильные 5 чисел 0 0 0 0 50
.Это проблема, с которой вы сталкиваетесь при проверке мод10 / Luhn.Абсолютно невозможно определить, какие числа / числа являются / являются неправильными.
Вы спросили в ответ на другой ответ, существует ли какой-либо другой алгоритм, чтобы определить, является ли индивидуальная цифра неправильной;это не имеет никакого смысла. Лун это алгоритм , нравится это или нет.Числа не были сгенерированы, чтобы соответствовать любому другому алгоритму, и вы не сможете изменить алгоритм после того, как он используется всем миром.
Как несвязанная критика, ваша функция не должнавозвращать читаемые человеком сообщения об ошибках / сообщения об успехе.Это ужасная практика, которая приводит к неразрешимым, нелокализуемым приложениям.