C# ile Rastgele Kod Üretimi

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