Makale Özeti

Bir dizi içerisindeki karakterlerden belli sayıda rastgele seçilmiş olanlarının biraraya getirilmesiyle oluşturulan rastgele kodlar, güvenlik de dahil bir çok uygulama yaklaşımı içerisinde kullanılırlar. Bu kullanım alanlarından biri de üye kayıt sistemidir.

Makale

Vb.Net 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ğiniz 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 Function GenerateCode(ByVal codeLength As Integer) As String

End Function

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.

Dim sb As New System.Text.StringBuilder

Dim objRandom As 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.

Dim strChars() As String = {"A", "B", "C", "D", "E", "F", "G", "H",
                           ......................................
                           "l", "m", "n", "o", "p", "q", "r", "s", "z"}

Ş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

Dim maxRand As Integer = 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.

Dim rndNumber As Integer = 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 i As Integer = 0 To codeLength - 1
    Dim rndNumber As Integer = objRandom.Next(maxRand)
    sb.Append(strChars(rndNumber))
Next

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

Böylece dilediğimiz uzunlukta ve dilediğimiz karakterleri içeren, rastgele üretilmiş karakter dizilerine sahip olabiliriz.

Hoşçakalın.
Kadir ÇAMOĞLU



Sub Main()
    Dim newCode As String
    newCode = GenerateCode(10)
    Console.WriteLine("Üretilen kod : {0}", newCode)
    Console.ReadLine()
End Sub
 


Private Function GenerateCode(ByVal codeLength As Integer) As String

Dim sb As New System.Text.StringBuilder
Dim objRandom As New System.Random

Dim strChars() As String = {"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"}

Dim maxRand As Integer = strChars.GetUpperBound(0)
For i As Integer = 0 To codeLength - 1
    Dim rndNumber As Integer = objRandom.Next(maxRand)
    sb.Append(strChars(rndNumber))
Next

Return sb.ToString()

End Function