BTUIKUtil.m 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #import "BTUIKUtil.h"
  2. @implementation BTUIKUtil
  3. #pragma mark - Class Method Utils
  4. + (BOOL)luhnValid:(NSString *)cardNumber {
  5. // http://rosettacode.org/wiki/Luhn_test_of_credit_card_numbers#Objective-C
  6. const char *digitChars = [cardNumber UTF8String];
  7. BOOL isOdd = YES;
  8. NSInteger oddSum = 0;
  9. NSInteger evenSum = 0;
  10. for (NSInteger i = [cardNumber length] - 1; i >= 0; i--) {
  11. NSInteger digit = digitChars[i] - '0';
  12. if (isOdd) {
  13. oddSum += digit;
  14. } else {
  15. evenSum += digit/5 + (2*digit) % 10;
  16. }
  17. isOdd = !isOdd;
  18. }
  19. return ((oddSum + evenSum) % 10 == 0);
  20. }
  21. + (NSString *)stripNonDigits:(NSString *)input {
  22. return [self stripPattern:@"[^0-9]" input:input];
  23. }
  24. + (NSString *)stripNonExpiry:(NSString *)input {
  25. return [self stripPattern:@"[^0-9/]" input:input];
  26. }
  27. + (NSString *)stripPattern:(NSString *)pattern input:(NSString *)input {
  28. if (!input) return nil;
  29. NSError *error;
  30. NSRegularExpression *re = [NSRegularExpression regularExpressionWithPattern:pattern
  31. options:0
  32. error:&error];
  33. return [re stringByReplacingMatchesInString:input
  34. options:0
  35. range:NSMakeRange(0, input.length)
  36. withTemplate:@""];
  37. }
  38. @end