Skip to content

Commit d37e2aa

Browse files
committed
All files added
1 parent cd643d0 commit d37e2aa

File tree

15 files changed

+992
-0
lines changed

15 files changed

+992
-0
lines changed

Diff for: TCValidation/NSString+TCValidation.h

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
//
2+
// NSString+TCValidation.h
3+
// TCValidation
4+
//
5+
// Created by Ismail GULEK on 05/01/2017.
6+
// Copyright © 2017 Ismail Gulek. All rights reserved.
7+
//
8+
9+
#import <Foundation/Foundation.h>
10+
11+
@interface NSString (TCValidation)
12+
13+
/**
14+
* Returns true if the receiver string is valid for the given regex pattern and the number of matches for whole string is 1.
15+
*/
16+
-(BOOL) isValidForRegexPattern:(NSString *)pattern;
17+
18+
/**
19+
* Returns true if the receiver string is a valid TC number.
20+
*/
21+
-(BOOL) isValidTCNumber;
22+
23+
@end

Diff for: TCValidation/NSString+TCValidation.m

+78
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
//
2+
// NSString+TCValidation.m
3+
// TCValidation
4+
//
5+
// Created by Ismail GULEK on 05/01/2017.
6+
// Copyright © 2017 Ismail Gulek. All rights reserved.
7+
//
8+
9+
#import "NSString+TCValidation.h"
10+
11+
@implementation NSString (TCValidation)
12+
13+
-(BOOL) isValidForRegexPattern:(NSString *)pattern
14+
{
15+
NSError * error = nil;
16+
NSRegularExpression * expression = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:&error];
17+
if(error)
18+
{
19+
NSLog(@"Regular expression error: %@", error);
20+
return NO;
21+
}
22+
NSRange completeRange = NSMakeRange(0, self.length);
23+
NSRange rangeOfFirstMatch = [expression rangeOfFirstMatchInString:self options:0 range:completeRange];
24+
25+
// returns true if complete string matches the pattern
26+
return NSEqualRanges(completeRange, rangeOfFirstMatch);
27+
}
28+
29+
-(BOOL) isValidTCNumber
30+
{
31+
/*
32+
Rules:
33+
1. 11 hanelidir.
34+
2. Her hanesi rakamsal değer içerir.
35+
3. İlk hane 0 olamaz.
36+
4. 1. 3. 5. 7. ve 9. hanelerin toplamının 7 katından, 2. 4. 6. ve 8. hanelerin toplamı çıkartıldığında, elde edilen sonucun 10’a bölümünden kalan, yani Mod 10’u bize 10. haneyi verir.
37+
5. 1. 2. 3. 4. 5. 6. 7. 8. 9. ve 10. hanelerin toplamından elde edilen sonucun 10’a bölümünden kalan, yani Mod10’u bize 11. haneyi verir.
38+
*/
39+
40+
// Rule 1 & 2 & 3
41+
NSString * pattern = @"[1-9][0-9]{10}";
42+
if(![self isValidForRegexPattern:pattern])
43+
{
44+
return NO;
45+
}
46+
47+
// preparations
48+
NSInteger digits[11];
49+
50+
for(NSInteger i = 0; i < 11; i++)
51+
{
52+
NSString * character = [self substringWithRange:NSMakeRange(i, 1)];
53+
digits[i] = [character integerValue];
54+
}
55+
56+
// Rule 4
57+
NSInteger sumOdd = digits[0] + digits[2] + digits[4] + digits[6] + digits[8];
58+
NSInteger sumEven = digits[1] + digits[3] + digits[5] + digits[7];
59+
60+
NSInteger modValue = (sumOdd * 7 - sumEven) % 10;
61+
if(modValue != digits[9])
62+
{
63+
return NO;
64+
}
65+
66+
// Rule 5
67+
NSInteger sumFirstTen = sumOdd + sumEven + digits[9];
68+
NSInteger modValue2 = sumFirstTen % 10;
69+
if(modValue2 != digits[10])
70+
{
71+
return NO;
72+
}
73+
74+
// all rules applied, receiver is a valid TC number
75+
return YES;
76+
}
77+
78+
@end

0 commit comments

Comments
 (0)