PHP rastgele sayı ve harf üretme işlemi için birden fazla fonksiyon kullanılabilir. İşimize yarayan uygun bir fonksiyon seçip projelerimizde kullanabiliriz. Birbirlerine göre avantajları yada dezavantajları olabilir. PHP matematik fonksiyonları içerisinde yer alan PHP rastgele sayı ve harf üretme fonksiyonları nelerdir? Görelim.
PHP Random Sayı Üretme
İlk olarak PHP rastgele (random) sayı oluşturma fonksiyonlarından başlayalım. Çünkü rastgele harf üretmek için rastgele sayı üretme fonksiyonlarını kullanıyoruz. Devamında PHP rastgele harf oluşturma ve kod üretme yöntemlerine göz atalım.
Rand() fonksiyonu
PHP random sayı üretme işlemi rand fonksiyonu ile kolaylıkla yapılabilir. Parametre olarak belirtilen 2 sayı arasında random sayı üretme işlemi yapılabileceği gibi hiç parametre belirtmeden de direkt olarak kullanılabilir. PHP rand fonksiyonu kullanımı aşağıdaki gibidir.
$sayi = rand();
echo $sayi; // örnek çıktı: 24503
echo '
';
$sayi2 = rand(10,20);
echo $sayi2; //örnek çıktı: 14
Rastgele sayı oluşturma işlemi sıfırdan itibaren PHP’de tanımlı getrandmax fonksiyonunun belirttiği sayıya kadar yapılabilir. Bu değer bazı sistemlerde değişebilir. Aşağıdaki şekilde getrandmax fonksiyonu kullanılarak rand fonksiyonunun limitini öğrenebilirsiniz.
echo getrandmax(); //çıktı: 32767
Mt_rand() fonksiyonu
Rand fonksiyonu gibi PHP random sayı oluşturma işlemi mt_rand fonksiyonu ile yapılabilir. Peki mt_rand fonksiyonunun rand fonksiyonundan ne farkı var?
PHP rastgele sayı üretme işlemini Mersenne Twister adlı PHP random sayı oluşturma algoritması ile gerçekleştirir. Bu algoritmayı kullanarak normal rand fonksiyonundan 4 kat daha hızlı rastgele sayı üretilebilmesi sağlanır ve rand fonksiyonundan çok daha daha büyük rastgele sayılar üretebilir. PHP mt_rand fonksiyonu kullanımı aşağıdaki gibidir.
$sayi = mt_rand();
echo $sayi; //örnek çıktı: 1925886691
$sayi2 = mt_rand(20,50);
echo $sayi2; //örnek çıktı: 33
Mt_getrandmax fonksiyonu ile mt_rand fonksiyonu limitini yani en fazla hangi sayıya kadar rastgele sayı üretebileceğini öğrenebiliriz.
echo mt_getrandmax(); //çıktı: 2147483647
Srand() fonksiyonu
Rand fonksiyonu için referans sayı üretme işlemi gerçekleştirir. Srand fonksiyonu rand fonksiyonundan önce tanımlanır ise srand fonksiyonu ile ilişkili bir şekilde rand fonksiyonu PHP benzersiz sayı üretme işlemi gerçekleştirir.
Srand fonksiyonu genellikle parametre olarak zaman fonksiyonu kullanır. Böylelikle rand fonksiyonunun rastgele sayı üretme sonucu her saniye değişir. Srand fonksiyonu içerisine parametre olarak girilen değer sabit sayı ise rand fonksiyonu sabit bir sayı üretir. Aslında srand fonksiyonu ile rand fonksiyonu için bir kaynak oluşturuluyor ve rand fonksiyonu bu kaynak ile alakalı olarak rastgele sayı üretmiş oluyor.
srand(time());
echo rand(); //örnek çıktı: 14968
srand(1);
echo rand(); //çıktı: 32422
Not: PHP’nin 4.2.0 sürümü ile birlikte rand fonksiyonu için arka planda otomatik olarak rastgele sayı üretici kaynak oluşturulmaya başlandığı için srand fonksiyonu kullanmaya gerek kalmadı.
Mt_srand() fonksiyonu
Srand fonksiyonu gibi referans sayı üretme işlemi gerçekleştirir. Mersenne Twister rastgele sayı oluşturucu için kaynak oluşturur. Srand fonksiyonu kullanımı ile aynıdır. PHP mt_srand fonksiyonu kullanımı aşağıdaki gibidir.
mt_srand(time());
echo mt_rand(); //örnek çıktı: 1525449205
mt_srand(1);
echo mt_rand(); //çıktı: 1244335972
Not: PHP’nin 4.2.0 sürümü ile birlikte mt_rand fonksiyonu için otomatik rastgele sayı üretici kaynak oluşturulduğu için mt_srand fonksiyonunu kullanmaya gerek kalmadı.
PHP Rastgele Harf Üretme
Aşağıda türkçe destekli PHP rastgele harf üretme işlemini açıklamalı bir şekilde görebilirsiniz.
$harf = 'ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ'; //A'dan Z'ye Türk Alfabesi
$harf_sayisi = mb_strlen($harf); //29
$secilen_harf_konumu = mt_rand(0, $harf_sayisi - 1); //0 ile 28 arasında rastgele sayı üret
echo mb_substr($harf, $secilen_harf_konumu, 1); //rastgele harf seç ve yazdır. Üçüncü parametreye 2 yazılsaydı belirlenen konumdan itibaren 2 harf çekmiş olacaktık.
Aşama aşama PHP rastgele harf üretme sürecini görelim;
- Türkçe bütün karakterleri $harf değişkenine atıyoruz.
- Kaç harf olduğunu mb_strlen fonksiyonu ile buluyoruz.
- $harf değişkeninde rastgele olarak elde edilecek harfin konumunu temsil etmesi için mt_rand fonksiyonu ile 0 ile 28 arasında rastgele sayı üretiyoruz. Elde edilen bu sayı $harf değişkenindeki herhangi bir harf konumunu temsil ediyor.
- Sonrasında mb_substr fonksiyonu ile $harf değişkeninde rastgele olarak elde edilen sayıya karşılık gelen konumdaki harfi buluyor ve ekrana yazdırıyoruz.
PHP Rastgele Sayı ve Harf Üretmek
Bu başlığı rastgele kod üretmek olarak da ifade edebiliriz. Yukarıdaki başlıkta olduğu gibi teker teker veya ikişer – üçer olacak şekilde birden fazla harf ve aynı zamanda rastgele sayılar üretip çıkan sonuçları tek bir değişkene ekleyerek PHP random sayı ve harf üretebiliriz. Bu aşamada döngü kullanmak işimizi kolaylaştırır.
$harf = 'ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ';
$harf_sayisi = mb_strlen($harf);
for ($i = 0; $i < 10; $i++){
$secilen_harf_konumu = mt_rand(0,$harf_sayisi - 1);
$kod .= mb_substr($harf, $secilen_harf_konumu, 1).rand(0,9);
}
echo mb_substr($kod, 0, 6); //J6Z1B2
//olusturulan rastgele sayi ve harf degerini 6 karakter olacak sekilde kirp ve yazdir
Ancak PHP rastgele sayı ve harf üretmek için biz daha kısa ve pratik bir yöntem tercih edebiliriz. Güvenlik kodu (Captcha) yapımı esnasında bu yöntem sıklıkla kullanılır.
echo substr(md5(rand(0, 90)), 0, 6); //f457c5
Tek satırla rastgele sayı ve harf oluşturma işlemini yapıyoruz. Rand fonksiyonu kullanarak 0 ile 90 arasında rastgele bir sayı oluşturuyoruz ve PHP md5 şifreleme yöntemiyle bu sayıyı şifreliyor, harf ve sayıdan oluşan 32 harfli bir kod elde ediyoruz. Substr fonksiyonu ile elde edilen bu verinin baştan itibaren 6 harfini kesiyor ve ekrana yazdırıyoruz. Bu mantıktan hareketle daha da geliştirerek PHP rastgele şifre üretmek için de bu yöntemi kullanabilirsiniz.
Uniqid Fonksiyonu
Pratik bir şekilde PHP tekrarsız ve benzersiz rastgele sayı ve harf üretmek için uniqid fonksiyonu kullanılabilir. Fonksiyon her çalıştığında zamana bağlı mikrosaniye tabanlı sayı ve harften oluşan rastgele veri üretir. PHP uniqid fonksiyonu kullanımı aşağıdaki gibidir.
echo uniqid(); //5e882b1902cd0
echo uniqid('my_'); //my_5e882b1902cdb
echo uniqid('my_',true); //my_5e882b1902cdf6.68717031