您的当前位置:首页正文

iOS 银行卡卡号校验

来源:要发发知识网
- (NSString*)reverseWordsInString:(NSString*)oldStr{
    NSMutableString *newStr = [[NSMutableString alloc] initWithCapacity:oldStr.length];
    for (int i = (int)oldStr.length - 1; i >= 0; i --) {
        unichar character = [oldStr characterAtIndex:i];
         [newStr appendFormat:@"%c",character];
    }
    return newStr;
}
-(BOOL)validateBankCard{

    NSString *string = self;
    NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789\b"];
    string = [string stringByReplacingOccurrencesOfString:@" " withString:@""];
    if ([string rangeOfCharacterFromSet:[characterSet invertedSet]].location != NSNotFound) {
        return NO;
    }
 
//    1、从卡号最后一位数字开始,偶数位乘以2,如果乘以2的结果是两位数,将结果减去9。
//    2、把所有数字相加,得到总和。
//    3、如果信用卡号码是合法的,总和可以被10整除。

    //先倒序
    NSString *reverstring = [self reverseWordsInString:self];


    int total = 0;

    for (int i =0;i< (int)reverstring.length - 1;   i ++) {
        int character = [[reverstring substringWithRange:NSMakeRange(i, 1)] intValue]  ;// (int) [reverstring characterAtIndex:i];
        if (i%2==0) {
            character=2*character;
            if (character>10) {
                character -=9;
            }
        }else{
            character=character;
        }
        total +=character;
    }
    NSLog(@"total%d",total);

    if (total%10==0) {
        return YES;
    }else{
        return NO;
    }
}