String uzunluğunu 11'SE ve içerisindeki 11 Char'ın Value'su [48, 57] aralığında ise girilen şey bir T.C kimlik no olabilir.
Ancak her 11 basamaklı sayı T.C. Kimlik numarası değildir. T.C. Kimlik numarasının son 2 hanesinin önceki 9 hanesinden türetilmiştir. İlk 9 hanesi ile son 2 hane karşılaştırılarak girilen T.C. Kimlik numarasının doğruluğunu kontrol edilebilir.
Hocam yanlış bilmiyorsam ilk 10 hanenin sayı değerleri toplamının birler basamağınnı sayı değeri 11 hane olmak zorunda.
String uzunluğunu 11'SE ve içerisindeki 11 Char'ın Value'su [48, 57] aralığında ise girilen şey bir T.C kimlik no olabilir.
Ancak her 11 basamaklı sayı T.C. Kimlik numarası değildir. T.C. Kimlik numarasının son 2 hanesinin önceki 9 hanesinden türetilmiştir. İlk 9 hanesi ile son 2 hane karşılaştırılarak girilen T.C. Kimlik numarasının doğruluğunu kontrol edilebilir.
long long
olarak tut. Tam sayı olarak tutacaksan aşağıdaki kodu kullanabilirsin, string olarak tutmak istersen string.length()
ile boyut, std::isdigit
ile de dizinin karakterlerinin rakam olup olmadığını kontrol etmen gerekiyor bir döngü içinde.#include <iostream>
#include <string>
int main()
{
std::size_t idx;
std::string line;
long long tc_identity;
while(true)
{
std::cout << "TC:";
std::getline(std::cin, line);
try
{
tc_identity = std::stoll(line.c_str(), &idx, 10);
idx!=11?throw 0:0;
break;
}catch(...)
{
std::cout << "Yanlis girdi, 11 hane ve sadece rakamlar!" << std::endl;
}
}
std::cout << "Dogru! -> " << tc_identity << std::endl;
return 0;
}
Hocam yanlış bilmiyorsam ilk 10 hanenin sayı değerleri toplamının birler basamağınnı sayı değeri 11 hane olmak zorunda.
T.C. Kimlik Numarası aslında 9 haneden oluşmaktadır, son 2 hanesi de kontrol/doğrulama amaçlı eklenmiştir. Kimlik numarası 0 ile başlayamaz. İlk 9 rakam kullanılarak 10. hane, ilk 10 rakam kullanılarak da 11. hane elde edilmektedir.
Girilen 11 haneli T.C. int tipi olarak mı tutulacak? Eğer öyleyse bu iyi bir fikir değil, ya string olarak tut ya da illa tam sayı olarak tutacaksanlong long
olarak tut. Tam sayı olarak tutacaksan aşağıdaki kodu kullanabilirsin, string olarak tutmak istersenstring.length()
ile boyut,std::isdigit
ile de dizinin karakterlerinin rakam olup olmadığını kontrol etmen gerekiyor bir döngü içinde.
C++:#include <iostream> #include <string> int main() { std::size_t idx; std::string line; long long tc_identity; while(true) { std::cout << "TC:"; std::getline(std::cin, line); try. { tc_identity = std::stoll(line.c_str(), &idx, 10); idx!=11?throw 0:0; break; }catch(...) { std::cout << "Yanlis girdi, 11 hane ve sadece rakamlar!" << std::endl; } } std::cout << "Dogru! -> " << tc_identity << std::endl; return 0; }
Bu sitenin çalışmasını sağlamak için gerekli çerezleri ve deneyiminizi iyileştirmek için isteğe bağlı çerezleri kullanıyoruz.