Bu uygulama birçok, yerde işimize yarayabilecek bir “Rastgele Kod
Üretici” dir. Rastgele üretilmiş bir koda birçok yerde ihtiyaç duyabiliriz.
Örneğin; web sitenizin üye kayıtlarında üye adaylarının gerçek email
adreslerini girmelerini garantilemek isteyebilirsiniz. Bunu sağlamanın en basit
yolu, kişinin verdiği email adresine rastgele ürettiğinz bir kodu göndermektir.
Böylece üye adayından, üyelik işlemlerinin tamamlanarak hesabın aktive
olabilmesi için, email adresine gönderdiğiniz aktivasyon kodunu “üyelik
aktivasyon” sayfanızda girmesini isteyebilirsiniz. Eğer email adresi doğru değilse
aktivasyon kodunu edinemeyeceğinde üyeliği de geçerli olmaz.
Rastgele kod üretebilmek için kullanacağımız en önemli sınıf “System”
isim alanı (namespace) içerisinde bulunan “Random” sınıfıdır (class). Bu sınıfı
kullanarak kod içerisinde görünmesini istediğimiz karakterler dizisinin boyutu
kadar rastgele tamsayı üreteceğiz.
Kullanacağımız diğer bir sınıf ise System.Text isim alanı içerisinde
bulunan StringBuilder sınıfıdır. Yapacağımız işlem bir metin birleştirme
döngüsü içermekte ve metin birleştirme işlemlerinde StringBuilder sınıfı,
string tipine oranla daha fazla performans sağlamaktadır.
Uygulamayı bir fonksiyon olarak hazırlayacağız.
Fonksiyon üreteceği “rastgele kod” un kaç karakter uzunlukta olması
istendiğini “codeLength” parametresiyle alacak. Ürettiği “codeLength” kadar
karakter uzunluğundaki “Rastgele Kod”u da string veri tipinde, fonksiyonun çağırıldığı
yere döndürecek.
private string GenerateCode(int codeLength)
{
}
Fonksiyonda ilk olarak “sb” değişken adıyla, “rastgele kod”u yapılandıracağımız
StringBuilder nesnesini ve ikinci olarak da “objRandom” adıyla, rastgele sayı
üretecek olan Random nesnesini yapılandıracağız.
System.Text.StringBuilder sb=new System.Text.StringBuilder();
System.Random objRandom=new System.Random();
Sıra “Rastgele Kod”umuz içinde yer almasını istediğimiz karakterleri bir
metin dizisi olarak tanılamaya geldi. Ben bu örnekte “A-Z”, “a-z” ve “0-9” arası
karakterleri kullandım. Siz isterseniz uygulamayı zenginleştirmek için farklı
karakterler de kullanabilirsiniz.
string[] strChars = { “A", "B", "C", ...
"1", "2", "3", ...
“a", "b", "c", ... };
Şimdi işlemlere başlayabiliriz. Önce rastgele üreteceğimiz sayı aralığını
bulalım. Yukarıdaki karakterler “strChars” adında bir metin dizisinde
tutulmaktalar. Diziler 0 indeksle başladıklarından rastgele üretilecek olan
minimum rakam 0 olmalıdır. Üretilecek maksimum rakam ise dizinin en son elemanının
indeksi olmalıdır. Dizinin en büyük indeksli elemanının indeks bilgisini
int maxRand=strChars.GetUpperBound(0);
koduyla aynı anda hem bu değeri tutacak olan “maxRand” adında bir değişken
tanımlayarak dizinin “GetUpperBound(0)” metoduyla alırız.
“Rastgele Kod”un üretilmesi, istenilen kod uzunluğu için her bir basamağın
rastgele oluşturulmasıyla sağlanır. Bunun için, 0 ile “Rastgele Kod” için
kullanılacak karakter dizisinin en büyük indeksi arasında rastgele bir sayı
objRandom.Next(maxRand) metoduyla üretilir ve bu değer “rndNumber” değişkenine
atanır.
int rndNumber=objRandom.Next(maxRand);
Karakter dizisindeki rastgele bir eleman, edinilen “rndNumber” sayısını
indeks olarak kullanarak “strChars(rndNumber)” ifadesiyle elde edilir ve bu
karakter sb.Append metoduyla “sb” nesnesine eklenir.
sb.Append(strChars[rndNumber]);
Eğer 10 karakter uzunluğunda bir “rastgele kod” istenirse, önce birinci
basamak için rastgele bir karakter üretilir, daha sonra ikinci basamak için ve
bu böylece 10’a kadar devam eder. Bu üretilen karakterler “sb” değişkeni
içerisinde ard arda eklenir.
for(int i=0;i<codeLength;i++)
{
int rndNumber=objRandom.Next(maxRand);
sb.Append(strChars[rndNumber]);
}
En son olarak da StringBuilder nesnesinin içerinde yapılandırılmış olan
ve rastgele karakterlerden meydana gelen sonuç, string veri tipine
sb.ToString() metoduyla dönüştürülerek fonksiyon sonlandırılır ve değer
fonksiyonun çağırıldığı yere döndürülür.
return sb.ToString();
Kodun tamamlanmış şekli aşağıdaki gibidir.
private string GenerateCode(int codeLength)
{
System.Text.StringBuilder sb=new System.Text.StringBuilder();
System.Random objRandom=new System.Random();
string[] strChars = {
"A","B","C","D","E","F","G","H","I",
"J","K","L","M","N","O","P","Q","R",
"S","T","U","V","W","X","Y","Z",
"1","2","3","4","5","6","7","8","9","0",
"a","b","c","d","e","f","g","h","i","j","k",
"l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
int maxRand=strChars.GetUpperBound(0);
for(int i=0;i<codeLength;i++)
{
int rndNumber=objRandom.Next(maxRand);
sb.Append(strChars[rndNumber]);
}
return sb.ToString();
}