C++ dilinde T.C. numarasının 11 haneli int olduğunu kontrol etme

Mehmet OK

Hectopat
Katılım
8 Aralık 2017
Mesajlar
15
Daha fazla  
Cinsiyet
Erkek
Klavyeden girilen int tipindeki T.C. numarasının 11 haneli ve sadece rakam girildiğini kontrol etmek istiyorum ama iş görür seviyede bir yol bulamadım. Yardımlarınız için teşekkür ederim...
 
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.
 
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.
 
Hocam yanlış bilmiyorsam ilk 10 hanenin sayı değerleri toplamının birler basamağınnı sayı değeri 11 hane olmak zorunda.

Teşekkür ederim araştıracağım ama okuldan verdikleri ödevle alakalı bir fonksiyon yazmam gerekiyor. Müşteri numarası falan kontrol etmem gerekli.
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.

"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." bu kısımda aradığım cevabı aldım gibi. Teşekkür ederim.
 
Son düzenleme:
Girilen 11 haneli TC int tipi olarak mı tutulacak? Eğer öyleyse bu iyi bir fikir değil, ya string olarak tut ya da illa tam sayı olarak tutacaksan 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.

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;
}
 
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 tutacaksan 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.

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;
}

Teşekkür ederim :)

Teşekkür ederim :)
 

Geri
Yukarı