Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Grog

Пакет, который помогает проверить действительность кредитных карточек

02.05.2010, 21:59. Показов 1899. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый!
Подскажите пожалуйста, существует ли пакет который помогает проверить действительность кредитных карточек.(Говорят что номер карты построен по алгоритму). Может кто знает серверы, где можно сделать запрос и проверку карточки.

Спасибо
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.05.2010, 21:59
Ответы с готовыми решениями:

Прием кредитных карточек - кто чем? какие рэйты?
Прием кредитных карточек - кто чем? какие рэйты?

Проверка кредитных карточек
Здравствуйте, Все!!! У меня возникла такая проблема я програмировал сайт и в нем нужно проверить кредитку. Заказчик попросил...

Дано n карточек, сложить из карточек один большой квадрат (без пустот). Сколько карточек останется?
У Пети есть n квадратных карточек. Он хочет сложить из них один большой квадрат (без пустот). Сколько карточек у него останется? ...

10
0 / 1 / 3
Регистрация: 27.03.2012
02.05.2010, 22:09
номер проверить можно, а 'действительность' проверить можно только с помощью какого-нибудь авторизованного (и платного) сервиса вроде www.assist.ru

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//---------------------------------------------------------
// Checks for valid credit card number using Luhn algorithm
//---------------------------------------------------------
 
public abstract class LuhnCheck {
 
  //--------------------------------
  // Filter out non-digit characters
  //--------------------------------
 
  private static String getDigitsOnly (String s) {
    StringBuffer digitsOnly = new StringBuffer ();
    char c;
    for (int i = 0; i < s.length (); i++) {
      c = s.charAt (i);
      if (Character.isDigit (c)) {
        digitsOnly.append (c);
      }
    }
    return digitsOnly.toString ();
  }
 
  //-------------------
  // Perform Luhn check
  //-------------------
 
  public static boolean isValid (String cardNumber) {
    String digitsOnly = getDigitsOnly (cardNumber);
    int sum = 0;
    int digit = 0;
    int addend = 0;
    boolean timesTwo = false;
 
    for (int i = digitsOnly.length () - 1; i >= 0; i--) {
      digit = Integer.parseInt (digitsOnly.substring (i, i + 1));
      if (timesTwo) {
        addend = digit * 2;
        if (addend > 9) {
          addend -= 9;
        }
      }
      else {
        addend = digit;
      }
      sum += addend;
      timesTwo = !timesTwo;
    }
 
    int modulus = sum % 10;
    return modulus == 0;
 
  }
 
  //-----
  // Test
  //-----
 
  public static void main (String[] args) {
    String cardNumber = '4408 0412 3456 7890';
    boolean valid = LuhnCheck.isValid (cardNumber);
    System.out.println (cardNumber + ': ' + valid);
    cardNumber = '4408 0412 3456 7893';
    valid = LuhnCheck.isValid (cardNumber);
    System.out.println (cardNumber + ': ' + valid);
    cardNumber = '4417 1234 5678 9112';
    valid = LuhnCheck.isValid (cardNumber);
    System.out.println (cardNumber + ': ' + valid);
    cardNumber = '4417 1234 5678 9113';
    valid = LuhnCheck.isValid (cardNumber);
    System.out.println (cardNumber + ': ' + valid);
  }
 
}
0
Grog
03.05.2010, 01:03
Огромное спасибо! Это то, что я искал.
0 / 0 / 1
Регистрация: 21.09.2009
Сообщений: 184
03.05.2010, 01:10
Вообщето в реальной жизни validation более сложная.

Вот ссылка на документацию с CyberSource http://www.cybersource.com/sup... age_id=416

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
/*
 * Created on Apr 11, 2003
 *
 * @author Maxim Ragozin <maxim@entente-llc.com>
 */
package com.cards2connect.om.util;
 
import com.cards2connect.um.model.CreditCardValue;
 
/**
 * @author Maxim Ragozin <maxim@entente-llc.com>
 */
public class CreditCardUtil {
 
    private static org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(CreditCardUtil.class);
 
    static public String normalizeCreditCardNumber(String number) {
        String value = null;
        if (number != null)
            value = number.replaceAll('[ .-]', '');
 
        if (log.isDebugEnabled()) {
            log.debug('normalizeCreditCardNumber( '' + number + '' ) : end. '' + number + '' >> '' + value + ''');
        }
        return value;
    }
 
    static public String formatCreditCardNumber(String number, Integer typeId) {
        String value = number;
        if (value != null) {
            // Форматировать в #### #### #### ####
            StringBuffer buffer = new StringBuffer(value);
            short type = CreditCardValue.TYPE_NONE;
            if (typeId != null) {
                type = typeId.shortValue();
            }
            switch (type) {
                case CreditCardValue.TYPE_AMEX :
                    buffer.insert(4, ' ');
                    buffer.insert(11, ' ');
                    break;
                case CreditCardValue.TYPE_VISA :
                case CreditCardValue.TYPE_MC :
                case CreditCardValue.TYPE_DISCOVER :
                case CreditCardValue.TYPE_DINERSCLUB :
                case CreditCardValue.TYPE_ENROUTE :
                case CreditCardValue.TYPE_JCB :
                default :
                    for (int i = 4; i < buffer.length(); i += 5) {
                        buffer.insert(i, ' ');
                    }
                    break;
            }
            value = buffer.toString();
        }
        if (log.isDebugEnabled()) {
            log.debug('formatCreditCardNumber( '' + number + '', ' + typeId + ' ) : end. '' + number + '' >> '' + value + ''');
        }
        return value;
    }
 
    static public String maskCreditCardNumber(String number) {
        String value = number;
        if (value != null) {
            if (value.length() >= 4) {
                value = value.substring(0, value.length() - 4).replaceAll('\d', '*') + value.substring(value.length() - 4);
            }
        }
        if (log.isDebugEnabled()) {
            log.debug('maskCreditCardNumber( '' + number + '' ) : end. '' + number + '' >> '' + value + ''');
        }
        return value;
    }
 
    /**
     * 
     * @param number
     * @return
     * @throws IllegalArgumentException
     * @see [url]http://www.cybersource.com/support_center/implementation/best_practices/view.xml?page_id=416[/url]
     */
    static public short validateCreditCardNumber(final String number) throws IllegalArgumentException {
        if (log.isDebugEnabled()) {
            log.debug('validateCreditCardNumber( '' + number + '' ) : start');
        }
        try {
            // remove ' ','-' or '.' chars
            String str = CreditCardUtil.normalizeCreditCardNumber(number);
            // check that only number
            Long.parseLong(str);
            // check lenght
            int len = str.length();
            // See [url]http://www.cybersource.com/support_center/implementation/best_practices/view.xml?page_id=416[/url]
            short type = CreditCardValue.TYPE_NONE;
            boolean found = false;
            // VISA
            if (!found && str.charAt(0) == '4' && (len == 16 || len == 13)) {
                type = CreditCardValue.TYPE_VISA;
                found = true;
            }
            if (!found && str.charAt(0) == '5'   0, step = 0; j <= length; j++) {
            char ch = number.charAt(length - j);
            int digit = CreditCardUtil.char2int(ch);
            if (digit == -1)
                continue;
            if (step % 2 == 0) {
                digit *= 2;
                if (digit >= 10) {
                    digit %= 10;
                    digit += 1;
                }
            }
            result += digit;
            ++step;
        }
        // ближайшее следущее число кратное десяти - для 68 кратное равно 70
        int top = (result + 9) / 10 * 10;
        result = top - result;
        //
        if (CreditCardUtil.char2int(control) != result) {
            throw new IllegalArgumentException();
        }
        return result;
    }
 
    /**
     * 
     * @param ch
     * @return
     * @throws IllegalArgumentException
     */
    static private int char2int(char ch) throws IllegalArgumentException {
        int digit = 0;
        switch (ch) {
            case '0' :
                digit = 0;
                break;
            case '1' :
                digit = 1;
                break;
            case '2' :
                digit = 2;
                break;
            case '3' :
                digit = 3;
                break;
            case '4' :
                digit = 4;
                break;
            case '5' :
                digit = 5;
                break;
            case '6' :
                digit = 6;
                break;
            case '7' :
                digit = 7;
                break;
            case '8' :
                digit = 8;
                break;
            case '9' :
                digit = 9;
                break;
            case ' ' :
            case '-' :
            case '.' :
            default :
                digit = -1;
                break;
                //              throw new IllegalArgumentException('Not A Number Character '' + ch + ''');
        }
        return digit;
    }
 
}
0
0 / 1 / 3
Регистрация: 27.03.2012
03.05.2010, 01:30
а есть ли смысл проверять сложнее, если эта проверка на самом деле мало что дает?
0
0 / 0 / 1
Регистрация: 21.09.2009
Сообщений: 184
03.05.2010, 05:55
Почему бы и нет. Например у меня разне правила проверки для проакшенп и тэстирования. Для примера зайдите на свой сайт и введите 4111 1111 1111 1111 VISA ... Я у одного своего знакомого так DVD-ку купил.
0
0 / 0 / 1
Регистрация: 21.09.2009
Сообщений: 184
03.05.2010, 05:57
Credit Card Account Number Verification - Card Type Identification

Card Type Identification
Information on how to identify the credit card type based on the numeric range and based on the length of the credit card number.

MasterCard
First digit must be a 5 and second digit must be in the range 1 through 5 inclusive. Only valid length is 16 digits.

Visa
First digit must be a 4 and length must be either 13 or 16 digits.

AmEx
First digit must be a 3 and second digit a 4 or 7. Only valid length is 15 digits.

Diners Club Carte Blanche
First digit must be 3 and second digit 0, 6 or 8. Only valid length is 14 digits.

Discover
First four digits must be 6011. Only valid length is 16 digits.

enRoute
First four digits must be 2014 or 2149. Only valid length is 15 digits.

JCB
First four digits must be 3088, 3096, 3112, 3158, 3337 or 35280000 - 35899999. Only valid length is 16 digits.
0
0 / 1 / 3
Регистрация: 27.03.2012
03.05.2010, 12:27
например, есть карта. я звоню и блокирую ее в банке, украли!!! потом иду в магазин и ввожу ее номер. номер правильный, так же как и 4111 1111 1111 1111 - каким макаром получит магазин деньги?

насколько я знаю, платеж через авторизованный сервис типа assist.ru или alfapay.ru (ты, кстати, спрашивал - вот наткнулся случайно) проверяется более конкрентно нежели только алгоритм номера карты
0
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 457
03.05.2010, 18:38
Или вы лимит карточки исчерпали, или срок годности истек. Конечно, проверка должна быть реальной.
0
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 457
03.05.2010, 18:44
Когда вы подписываетесь на сервис обработки карточек, то провайдер обычно обеспечивает возможность проверки. А вот если такое, что бы любой желающий проверил номер, так наверное нет. Иначе бы нашлись любители методом перебора номера находить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.05.2010, 18:44
Помогаю со студенческими работами здесь

Как установить пакет, который недоступен, но упомянут в списке зависимостей?
привет на виртуалку установил ubuntu 11.10. инет через проксю. интернет есть. firefox работает. пытаюсь установить pip $...

Нужно сделать класс который будет разбирать пакет с данными формата Json
Нужно сделать класс который будет разбирать пакет с данными формата Json. Как сделать этот класс?

Проверка почты на действительность
Как организовать проверку почты на действительность (валид). И через что pop3, imap? Искал в интернете но ничего не нашел, были...

Программа для проверки на действительность email ящиков
Подскажите пожалуйста. Программу для проверки на действительность email ящиков, и еще вот к этойй программе ePochta Verifier можно найти...

Почему если отправить пакет UDP и конечного адресата в сети не существует, то пакет не отправляется?
Добрый день! Вопрос для расширения кругозора. Мониторю свой трафик с помощью WireShark и заметил такую вещь: при отправке пакета по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
0 / 0 / 1
Регистрация: 21.09.2009
Сообщений: 184
03.05.2010, 18:44
Там было проще, программеры провайдера забыли код для тестирования убрать в продакшене. Было это в 1999 году, когда любая кухарка окончив курсы считалась архитектором.

Народ завязывайте с флэймом.

След вопрос - кто использует verified by visa?
0
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru