Проверьте формулу кредитной карты в приложении для iPhone

////////////ОБНОВЛЕНИЕ!//////////////////

Таким образом, я озирался в сети и после нахождения нескольких формул и тестирования. Я нашел формулу, которая работает. 1. Инвертируйте номер карты 2. Поскольку любая цифра удваивает номер 3. Для цифр, которые Вы не удвоили, добавьте их в новой "удвоенной" строке 4. Сложите все числа вместе - ОДИН ЗА ДРУГИМ 5. Разделитесь на десять, если нет никакого остатка, номер карты действителен - не мог бы быть "утвержден", но числа находятся по крайней мере в корректной последовательности.

Например, возьмите номер карты "4866 3060 7833 1744"

  1. реверс - 4471 3387 0603 6684
  2. создайте строку с любым числом, запускающимся с 2-го номера "47376364"
  3. теперь создайте строку с каждым числом, удвоенным "814617126128"
  4. теперь добавьте строку с цифрами, которые Вы не использовали на шаге 1 к строке с числами, удвоенными "41380068" (новая строка будет 81461712612841380068),
  5. теперь суммируйте строку, с помощью КАЖДОГО Отдельного символа (общие количества 77)
  6. теперь разделите сумму (77) на 10. Если существует остаток, карта недопустима (77/10 = 7.7) НЕДОПУСТИМАЯ КАРТА

Вот источник для этого http://www.brainjar.com/js/validation/default2.asp

Поскольку я люблю Вас всех, и Вы все помогли мне таким количеством способов, я думал идентификационная доля код, который я соединил, чтобы сделать эту формулу. Благодаря Mike Crandall снова, который помог мне инвертировать первую строку и я взял ее оттуда.

Это использует Формулу Luhn

Мой.h файл

#import 

@interface CCValidatorViewController : UIViewController {

    NSString * ccNumber;
    NSString * validCard;
    NSString * isAMEX;


}
@property (nonatomic, retain)NSString * ccNumber;
@property (nonatomic, retain)NSString * isAMEX;
@property (nonatomic, retain)NSString * validCard;
- (NSString *) validateCard:(NSString *)ccNumberString;

@end

Мой.m файл

- (void)viewDidLoad {
    [super viewDidLoad];
    ccNumber = @"4866306078331744"; //invalid card number
    ccNumber = [self validateCard:ccNumber];
    NSLog(@"%@",validCard);
}

- (NSString *) validateCard:(NSString *)ccNumberString{
    validCard = @"";
    NSString * ccNumberReversed = @"";
    NSString * doubleNumbers = @"";
    NSString * everyOtherNumber = @"";
    NSString * lastChar = @"";
    NSString * intDoubled;
    NSString * stringToSum;
    NSUInteger count = [ccNumberString length];
    NSUInteger len = 1;
    NSRange r;

    //since American Express is American Express....., we have to do something special for them.... assholes....
    r = NSMakeRange( 0, 1);
    lastChar = [ccNumberString substringWithRange:r];
    if ([lastChar compare:@"3"] ==0) {

        isAMEX = @"YES";

    }
    else {
        isAMEX = @"NO";
    }



    //reverse the string

    for ( int i=0; i

********** Исходное сообщение *******************

У кого-либо есть какой-либо код, который они могут совместно использовать, который проверит номер кредитной карты прежде, чем отправить на API?

В то время как я спрашиваю, там будут какими-либо проблемами от яблока, если я продаю билеты кинотеатру в рамках моего приложения?

Это приложение очень похоже на фанданго, но для частной цепочки театров (приблизительно 13 всего).

Заранее спасибо!

7
задан Louie 26 July 2010 в 20:18
поделиться

3 ответа

Я смог ответить на свой собственный вопрос, поделился им выше в "обновленной" области.

6
ответ дан 7 December 2019 в 07:40
поделиться

Вот код, который, вероятно, будет работать (использует алгоритм Луна ):

-(BOOL) validateCardNumber:(NSString *)cardNumber
{

const char *str = [cardNumber UTF8String];
int n, i, alternate, sum;

n = strlen(str);

if ( n < 13 || n > 19 )
    return NO;

for ( alternate = 0, sum = 0, i = n-1; i>-1; –i) {
    if ( !isdigit(str[i]))
        return NO;

    n = str[i] – ‘0′;

    if ( alternate ) {
        n*=2;
        if ( n > 9 )
            n = ( n % 10 ) + 1;
    }

    alternate = !alternate;

    sum += n;
}

return ( sum % 10 == 0 );
}

Благодарим Дональда Белленжера за этот метод.

1
ответ дан 7 December 2019 в 07:40
поделиться

Если вы продаете вещи внутри своего приложения, очень вероятно, что apple отклонит его, если только вы не используете продажи внутри приложения (в этом случае вам не нужно подтверждение кредитной карты).

0
ответ дан 7 December 2019 в 07:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: