Created
September 27, 2013 12:13
-
-
Save anlcan/6727712 to your computer and use it in GitHub Desktop.
tc kimlik numarasi dogrulama
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
int * split(const char * word){ | |
int len = strlen(word); | |
long long number = atoll(word);//[word longLongValue]; | |
int * result = (int*)malloc(len * sizeof(int)); | |
for( --len ; len >= 0; len--){ | |
int rem = number % 10; | |
result[len] = rem; | |
number -= rem; | |
number = number/10; | |
} | |
return result; | |
} | |
-(BOOL)checkTckNo:(NSString *)tckNo{ | |
//http://tr.wikipedia.org/wiki/T%C3%BCrkiye_Cumhuriyeti_Kimlik_Numaras%C4%B1 | |
int * array = split([tckNo cStringUsingEncoding:NSUTF8StringEncoding]); | |
#define DEBUG_TCKNO | |
#ifdef DEBUG_TCKNO | |
// ilk 10 rakamın toplamının birler basamağı, 11. rakamı vermekte. | |
int sum = 0; | |
for(int i = 0; i <10; i++) | |
sum += array[i]; | |
if ( sum % 10 != array[10]) | |
return NO; | |
//1, 3, 5, 7 ve 9. rakamın toplamının 7 katı ile | |
//2, 4, 6 ve 8. rakamın toplamının 9 katının toplamının birler basamağı | |
//10. rakamı | |
int sum1 = array[0]+array[2]+array[4]+array[6]+array[8]; | |
int sum2 = array[1]+array[3]+array[5]+array[7]; | |
int rest1 = ((sum1 * 7 ) + (sum2 * 9)) % 10; | |
if ( rest1 != array[9]) | |
return NO; | |
// 1, 3, 5, 7 ve 9. rakamın toplamının 8 katının birler basamağı | |
// 11. rakamı vermektedir | |
int rest2 = (sum1 * 8) %10; | |
if ( rest2 != array[10]) | |
return NO; | |
#endif | |
free(array); | |
return YES; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment