TC adreslerinin bir algoritması var. Ona göre bir doğrulayıcı;
C:
#include <stdio.h>
#include <math.h>
unsigned long get_digit(unsigned long num, int digit) {
int digits = (int)(log10(num) + 1);
return (unsigned long)(num / (unsigned long)(pow(10, digits - digit))) % 10;
}
int verify_tc(unsigned long tc) {
int digits = (int)(log10(tc) + 1);
if (digits != 11) return 0;
int odd = 0;
int even = 0;
int sum;
for (int i = 1; i <= 9; i++) {
if (i & 0x1)
odd += get_digit(tc, i);
else
even += get_digit(tc, i);
}
sum = odd + even + get_digit(tc, 10);
if ((odd * 7 - even) % 10 != get_digit(tc, 10)) return 0;
if (sum % 10 != get_digit(tc, 11)) return 0;
return 1;
}
int main(void) {
printf("%d", verify_tc(10000000146));
return 0;
}
Düzeltme: Program kodları BBCode bloklarından arındırılmıştır. İyi forumlar.
Moderatör tarafında düzenlendi:





