Я считаю, что любое веб-приложение, которое отклоняет номер кредитной карты с пробелами, не выполняет свою работу. Когда вы получаете номер кредитной карты, это достаточно просто сделать:
String ccNumber = ccNumber.replaceAll("[\\s-]+", "");
для удаления пробелов и тире (некоторые используют их тоже). Затем подтвердите результат. Вы просто будете раздражать своих пользователей, если заставляете их удалять пробелы, которые вы можете сделать так же легко.
Что касается как проверять, хорошо, это зависит от многих вещей, таких как, какой веб-фреймворк вы используете и какие параметры проверки вы выбрали. Например, Struts 1 может использовать или не использовать Apache Commons Validator, тогда как Spring MVC будет (вероятно) использовать проверку Spring и так далее. Так что я не могу сказать вам точно, как проверить, но я могу сказать вам что проверить.
Первое, что номер CC с пробелами должен не быть отклонен. Большинство людей найдут:
4123 0987 8876 2939
намного легче читать, чем:
4123098788762939
, что действительно важно, если пользователь пропустил или набрал неверную цифру и должен выяснить, почему его номер кредитной карты не прошел проверку. Метод replaceAll () в верхней части этого поста описывает эту ситуацию.
Во-вторых, вы правильно отображаете номер кредитной карты (даже если некоторые цифры заменены на X из соображений безопасности). Я предлагаю вам прочитать Анатомия номеров кредитных карт .
На этой странице приведены правила для количества цифр и действительные префиксы. Надежное веб-приложение реализует эти , поэтому вы можете определить, является ли номер кредитной карты недействительным, прежде чем пытаться использовать его . Отправка данных кредитной карты на платежный шлюз может занять до 30 секунд (или, возможно, даже больше), поэтому вам не следует делать это, пока вы не уверены, что платеж будет принят. Делать иначе - значит предоставлять действительно плохой пользовательский опыт. Есть все шансы, что пользователь сдастся, если он потерпит неудачу 1-2 раза, а не будет ждать.
Что касается их отображения, это зависит от количества цифр:
- 16: 4 группы по 4, разделенные пробелом;
- 15: как карта American Express , то есть 4-6-5 с пробелом между группами;
- 14: как Diners Club карта, то есть 4-6-4 с пробелом между каждой группой;
- 13: Никогда не видел 13, но на ум приходят 4-5-4 или 4-4-5 или 5-4-4 (или, возможно, 3-3-3-4).
Номер кредитной карты должен быть проверен в соответствии с алгоритмом контрольной суммы, упомянутым на странице , перед отправкой на обработку как часть стандартной процедуры проверки. На этой странице есть Java-реализация этой подпрограммы.
Каждый веб-сайт, который принимает платежи по кредитным картам, должен выполнять все вышеперечисленное как абсолютный минимум , или вы просто отбрасываете бизнес, поскольку процент ваших пользователей разочарован.
Итак, в короткой версии есть два простых правила:
- Будьте как можно более прощающими с пользовательским вводом; и
- Сделайте абсолютно все возможное, чтобы проверить данные кредитной карты перед отправкой.