uemit
4/3/2013 - 2:40 PM

Objective-C implementation of mod97 IBAN checking algorithm

Objective-C implementation of mod97 IBAN checking algorithm

#import "NSString+Mod97Check.h"

@implementation NSString (Mod97Check)

- (BOOL)passesMod97Check {
    NSString *string = [self uppercaseString];
    NSInteger mod = 0, length = [self length];
    for (NSInteger index = 4; index < length + 4; index ++) {
        unichar character = [string characterAtIndex:index % length];
        if (character >= '0' && character <= '9') {
            mod = (10 * mod + (character - '0')) % 97; // '0'=>0, '1'=>1, ..., '9'=>9
        }
        else if (character >= 'A' && character <= 'Z') {
            mod = (100 * mod + (character - 'A' + 10)) % 97; // 'A'=>10, 'B'=>11, ..., 'Z'=>35
        }
        else {
            return NO;
        }
    }
    return (mod == 1);
}

@end
#import <Foundation/Foundation.h>

@interface NSString (Mod97Check)

- (BOOL)passesMod97Check; // Returns result of mod 97 checking algorithm. Might be used to check IBAN.
                          // Expects string to contain digits and/or upper-/lowercase letters; space and all the rest symbols are not acceptable.

@end