Skip to content

Instantly share code, notes, and snippets.

@anlcan
Created September 27, 2013 12:13
Show Gist options
  • Save anlcan/6727712 to your computer and use it in GitHub Desktop.
Save anlcan/6727712 to your computer and use it in GitHub Desktop.
tc kimlik numarasi dogrulama
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