Bu rehberde, Java programlama dilini kullanarak geçerli TC Kimlik Numaraları nasıl oluşturulacağını adım adım açıklayacağız. TC Kimlik No algoritması, belirli matematiksel kurallara dayanır ve bu kurallara uygun numaralar üretmek için bir Java metodu geliştireceğiz.
TC Kimlik No Algoritması Nedir?
TC Kimlik Numarası 11 haneden oluşur ve şu kurallara uyar:
- İlk hane sıfır olamaz
- 11. hane: İlk 10 hanenin toplamının 10’a göre modülüsü (birler basamağı) 11. haneyi verir
- 10. hane: (1., 3., 5., 7. ve 9. hanelerin toplamı) × 7 ile (2., 4., 6. ve 8. hanelerin toplamı) arasındaki farkın 10’a göre modülüsü 10. haneyi verir
- Tüm haneleri aynı rakamdan oluşan numaralar (11111111111 gibi) geçersizdir
Algoritmanın matematiksel detayı ve çalışan örnek için TC Kimlik Numarası Algoritması sayfamızı ziyaret edebilirsiniz.
Java ile TC Kimlik No Üretme Kodu
Aşağıda, yukarıdaki kurallara uygun rastgele TC Kimlik Numaraları üreten bir Java metodu bulunmaktadır. Bu metot, ilk 9 haneyi rastgele üretir ve ardından 10. ile 11. haneleri algoritmaya göre hesaplar.
| |
Kodun Çalışma Mantığı
- Rastgele üretim:
Random.nextInt()ile 5 haneli ve 4 haneli iki rastgele sayı üretilir. Bu sayılar, ilk 9 hanenin temelini oluşturur. - Çapraz birleştirme: İki sayının rakamları birbiriyle iç içe geçirilerek (interleaving) ilk 9 hane oluşturulur. Bu yöntem, hanelerin dağılımını daha dengeli hale getirir.
- Kontrol basamakları: 10. hane
(k1Sum × 7 − k2Sum) mod 10formülüyle, 11. hane ise tüm ilk 10 hanenin toplamının mod 10’u ile hesaplanır.
Kullanım Örnekleri
Birden Fazla TC Kimlik No Üretme
// 5 adet TC Kimlik No üretme
for (int i = 0; i < 5; i++) {
System.out.println(TCNumberGenerator.generateTCNumber());
}
Bir Liste Olarak Üretme
import java.util.ArrayList;
import java.util.List;
public static List<String> generateTCNumbers(int count) {
List<String> numbers = new ArrayList<>();
for (int i = 0; i < count; i++) {
numbers.add(generateTCNumber());
}
return numbers;
}
// Kullanım
List<String> testNumbers = generateTCNumbers(100);
Spring Boot REST API’sinde Kullanım
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/tc")
public class TCNumberController {
@GetMapping("/generate")
public Map<String, String> generate() {
return Map.of("tc_kimlik_no", TCNumberGenerator.generateTCNumber());
}
@GetMapping("/generate-batch")
public Map<String, List<String>> generateBatch(
@RequestParam(defaultValue = "5") int count) {
return Map.of("numbers", TCNumberGenerator.generateTCNumbers(count));
}
}
Performans ve Güvenlik Notları
Rastgelelik:
java.util.Randomyeterince hızlıdır, ancak kriptografik güvenlik gerektiren durumlardajava.security.SecureRandomkullanmanız önerilir:SecureRandom secureRand = new SecureRandom(); int randomPool1 = secureRand.nextInt(90000) + 10000;Thread güvenliği:
Randomsınıfı thread-safe değildir. Çok kanallı (multithreaded) ortamlarda her thread için ayrı birRandomörneği oluşturun veyaThreadLocalRandomkullanın:int randomPool1 = ThreadLocalRandom.current().nextInt(10000, 100000);Kullanım alanları:
- Test verisi oluşturma (JUnit testleri, entegrasyon testleri)
- Demo ve eğitim amaçlı projeler
- Veritabanı seed verisi üretme
- Form doğrulama testleri
Yasal uyarı: Bu metot sadece test ve eğitim amaçlıdır. Gerçek TC Kimlik Numaralarıyla çalışırken kişisel verilerin korunması kanunlarına (KVKK) dikkat ediniz.
Sıkça Sorulan Sorular
S: Bu metot gerçekten geçerli TC Kimlik Numaraları mı üretiyor?
C: Evet, bu metot TC Kimlik No algoritmasına uygun numaralar üretir. Üretilen numaralar doğrulama kodumuzla test edildiğinde “Geçerli” sonucunu döndürür. Ancak üretilen numaralar yalnızca test amaçlı kullanılmalıdır.
S: Spring Boot veya Android projelerinde kullanabilir miyim?
C: Evet, bu metot saf Java ile yazılmıştır ve herhangi bir Java projesinde (Spring Boot, Android, Java EE, Jakarta EE) kullanılabilir. Herhangi bir harici bağımlılık gerektirmez.
S: Üretilen numaralar benzersiz mi?
C: Metot rastgele sayılar kullandığı için aynı numarayı tekrar üretme ihtimali vardır. Eğer benzersizlik gerekiyorsa, üretilen numaraları bir Set içinde toplayarak tekrarları filtreleyebilirsiniz.
S: Random yerine SecureRandom ne zaman kullanılmalı?
C: Test verisi için Random yeterlidir. Ancak üretilen numaraların tahmin edilememesi gerekiyorsa (örneğin güvenlik testleri için), SecureRandom kullanın.
Sonuç
Bu makalede, Java kullanarak nasıl geçerli TC Kimlik Numaraları oluşturabileceğinizi öğrendiniz. Bu kodu JUnit testlerinde test verisi oluşturmak, Spring Boot API’lerinde demo yanıtları üretmek veya veritabanı seed işlemlerinde kullanabilirsiniz.
İlgili İçerikler
- TC Kimlik Numarası Algoritması — Algoritmanın matematiksel detayları ve çalışan örnekler
- TC Kimlik No Doğrulama Kodları — Tüm diller için doğrulama fonksiyonları
- TC No Üret Aracı — Online TC Kimlik No üretme ve doğrulama aracı
- PHP ile TC Kimlik No Oluşturma — PHP implementasyonu
- Python ile TC Kimlik No Oluşturma — Python implementasyonu
- JavaScript ile TC Kimlik No Oluşturma — JavaScript implementasyonu
- Go ile TC Kimlik No Oluşturma — Go implementasyonu
Bu makalede verilen bilgiler ve kod örnekleri yalnızca eğitim ve test amaçlıdır. Resmi işlemler için her zaman Nüfus ve Vatandaşlık İşleri Genel Müdürlüğü’nün resmi kaynaklarını kullanınız.