//////////// ОБНОВЛЕНИЕ! //////////////////
Итак, я оглянулся в сети и, найдя несколько формул и тестирований. Я нашел формулу, которая работает.
1. Поменять номер карты
2. Для каждой другой цифры удвойте число
3. Для цифр, которые вы не удвоили, добавьте их в новую строку «удвоение»
4. Сложите все числа вместе - ОДИН ПО ОДНОМУ
5. Разделите на десять, если нет остатка, номер карты действителен - может быть не «утвержден», но номера по крайней мере в правильной последовательности.
Например, взять номер карты "4866 3060 7833 1744"
- реверс - 4471 3387 0603 6684
- создать строку с каждым другим
номер, начинающийся со 2-го числа
"47376364"
- теперь создайте строку с каждые
число удвоилось "814617126128"
- теперь добавляем строку с цифрами
что вы не использовали в шаге 1 для строки с удвоенными числами
«41380068» (новая строка будет
81461712612841380068)
- теперь суммируем строку, используя КАЖДЫЙ
ИНДИВИДУАЛЬНЫЙ персонаж (всего 77)
- теперь разделите сумму (77) на 10. Если
есть остаток, карта
недействительно (77/10 = 7,7) НЕВЕРНАЯ КАРТА
Вот источник для этого http://www.brainjar.com/js/validation/default2.asp
Поскольку я люблю вас всех, и вы все помогали мне во многих отношениях, я подумал, что поделюсь кодом, который я собрал для создания этой формулы. Еще раз спасибо Майку Крэндаллу, который помог мне перевернуть первую строку, и я взял ее оттуда.
Используется формула Луна
Мой .h файл
#import <UIKit/UIKit.h>
@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<count; i++){
r = NSMakeRange( count-i-1, len);
lastChar = [ccNumberString substringWithRange:r];
ccNumberReversed = [ccNumberReversed stringByAppendingString:lastChar];
}
//double every other number
int loc = 1;
int ttr = ccNumberReversed.length/2;
for ( int i=0; i<ttr; i++){
r = NSMakeRange( loc, len);
loc = loc+2;
lastChar = [ccNumberReversed substringWithRange:r];
int dv = [lastChar intValue];
dv = (dv * 2);
intDoubled = [NSString stringWithFormat:@"%d",dv];
doubleNumbers = [doubleNumbers stringByAppendingString:intDoubled];
}
// get every other number starting at index 0
loc = 0;
if ([isAMEX compare:@"YES"] ==0) {
ttr = ccNumber.length/2+1;
}
else {
ttr = ccNumber.length/2;
}
for ( int i=0; i<ttr; i++){
r = NSMakeRange( loc, len);
loc = loc+2;
lastChar = [ccNumberReversed substringWithRange:r];
everyOtherNumber = [everyOtherNumber stringByAppendingString:lastChar];
}
//combine both strings so we can sum them up
stringToSum = [doubleNumbers stringByAppendingString:everyOtherNumber];
// add all the numbers up one by one and divide by 10... if no remainder - its a valid card
loc = 0;
ttr = stringToSum.length;
int stringSum = 0;
for ( int i=0; i<ttr; i++){
r = NSMakeRange( loc, len);
lastChar = [stringToSum substringWithRange:r];
int cc = [lastChar intValue];
stringSum = stringSum+cc;
loc ++;
}
if (stringSum%10 == 0) {
validCard = @"YES";
}
else {
validCard = @"NO";
}
return validCard;
}
********** Оригинальный пост *******************
Есть ли у кого-нибудь код, которым он может поделиться, который подтвердит номер кредитной карты перед отправкой в API?
Пока я спрашиваю, будут ли какие-либо проблемы с яблоком, если я продаю билеты в кинотеатр в моем приложении?
Это приложение очень похоже на фанданго, но для частной сети кинотеатров (всего около 13).
Заранее спасибо!