
Php ile rastgele sayı üretmek için rand() fonksiyonu kullanılmaktadır. Fakat belirli şartlarda sayı üretme be benzersiz olmasını kılmak için farklı işlemler yapmak gerekmektedir. Bunun için rand() fonksiyonunu sayı üretmek için değil, sayı üretmek istediğimiz diziden verileri çekmek için kullanacağız.
Tekrarsız sayı üretmek için öncelikle sayıyı üretmeli, sonrasında veri tabanından kontrol etmeliyiz. Kontrol sonrasında üretilen kod varsa işlem tekrarlanmalı yoksa kodu vermelidir. Bu işlemlerin sağlıklı bir şekilde gerçekleşmesi için fonksiyon üzerinden çalışmamız en sağlıklısı olacaktır.
Sayı üretme işini iki türlü yapacağız. Bunlardan birisi sadece kod üretirken diğeri de oyun, program lisansları gibi belirli bir hane içerisinde olacak yani; XXXX-XXXX-XXXX-XXXX gibi formatta kod üreteceğiz.
CD KEY Formatında Rastgele Tekrarsız Sayı Üretme
CD key formatında 4*4 formatında sayı üretmek için for içinde for kullanmak gerekecektir. İlk for değeri sayılar arasında tire(-) koymayı sağlarken diğer for değeri sayı üretmeye yarayacaktır. Yapmamız gereken tek şey, sayı üretmek istediğimiz bir değişken oluşturmak e bunu for değerleri ile işlemek olacak.
function kod_uret(){ global $db; $yazilar = 'ABCDEFGHJKLMNOPQRSTUVWXYZ0123456789'; $seriNo = ''; for ($i = 0; $i < 4; $i++){ for ($b = 1; $b <= 4; $b++){ $seriNo .= $yazilar[rand(0,34)]; } if ($i < 3) { $seriNo .= '-'; } } $Kontrol = $db->query("SELECT * FROM TABLO_ADI WHERE ARANACAK='".$seriNo."'"); if( $Kontrol->rowCount() > 0 ){ $seriNo = ""; return kod_uret(); }else{ return $seriNo; } }
Yukarıdaki fonksiyonda ilk olarak $yazilar değişkeni ile üretmek istediğimiz değerleri belirliyoruz. Burada küçük harfleri de ekleyebilirsiniz. Sonrasında $seriNo değişkeni ile üreteceğimiz sayıyı taşıyacak değişkeni tanımlıyoruz. Değişkeni tanımladıktan sonra ilk olarak sayılar arası tire(-) koyacağımız döngüyü, sonrasınra tanımlanan değişkenden rastgele verileri çekecek döngüyü tanımlıyoruz. Tanımlama işlemleri sonrasında if kontrolü ile belirlenen sayı değerleri arasına tire(-) işaretini koyuyoruz.
Sayı üretme işlemi bittikten sonra $Kontrol değişkenine belirlenen tabloda ürettiğimiz kodu saydırıyoruz. Saydırma sonrasında aranan kod, 0(Sıfır) dan büyükse return ile tekrar fonksiyonu çalıştırıyoruz. Eğer değerinde ise üretilen kodu return ile döndürüyoruz.
Rastgele Benzersiz Sayı Üretme
Bu işlem için aslında yukarıdaki fonksiyonu biraz kırpmamız yeterli olacaktır. Daha farklı bir yönden yaklaşmak için farklı bir yapıyla hazırlamak istedim.
function set_Kodu(){ global $db; $degerler = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'; $sifre = array(); $YaziSay = strlen($degerler) - 1; for ($i = 0; $i < 12; $i++) { $n = rand(0, $YaziSay); $sifre[] = $degerler[$n]; } $Kontrol = $db->query("SELECT * FROM TABLO_ADI WHERE ARANACAK='".$sifre."'"); if( $Kontrol->rowCount() > 0 ){ $sifre = ""; return set_Kodu(); }else{ return implode($sifre); } }
Bu şekilde yaptığımızda 12 hanelik benzersiz şifre üretecektir. 12 değerinin yazılı olduğu alana kaç değerini yazarsanız o kadar üretim yapacaktır. Hatta bunu fonksiyon değeri olarak tanımlarsanız dinamik bir kod üretme fonksiyonu elde etmiş olursunuz.