herkes ayrı ayrı alternatif sunmuş. forumdaki en iyi şekilde cevaplanan mesajalrdan biridir kesinlikle.bu konudaki tek gereksiz mesaj sizinki olsa gerek.
Üstadım ben bişey söylediğim zaman anlayın ki laf olsun diye konuşmuyorum.Arkasında dolu dolu deneyim var.Ben birşey söylediğimde php hakkında, iki çıkarım yapın. Birincisi doğrudur diyip kabul edebilirsiniz.İkincisi bu adam yanlış söylemiş olabilir araştırayım bakayım diyebilirsiniz."Yauw boş boş konuşmayalım dükkanın önünü kalabalık etmeyin" demek size sonuç getirmez.
Bu arada ironidir ki tek gereksiz mesaj diyerekten, sizin görüşünüz ile ikinci gereksiz mesajı yazmışsınız.
Ben uzman olduğum bir konuda görüşümü belirtiyorum. Bu konuda itirazınız var ise buyrun detayına inin konuşalım.
Şimdi neden benim boş yazmadığıma gelince madem ki öyle düşünüyorsunuz, bir bakalım.
Aşağıdaki yazdıklarımın hiçbirisini lütfen kimse kişiselleştirmesin, herkesin emeğine saygım var ama neden gereksiz dediğimi izzah etmek isterim.
/* Şifre */
function sifre_uret($uzunluk) {
$karakterler = "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLM NOPQRSTUVWXYZ";
$karakter_sayi = strlen($karakterler);
for ($ras = 0; $ras < $uzunluk; $ras++) {
$rakam_ver = rand(0,$karakter_sayi-1);
$sifre_ver .= $karakterler[$rakam_ver];
}
return $sifre_ver;
}
/* Şifre */
sifre_uret(10) yazarsan 10 karakter sifre_uret(5) yazarsan 5 karakter üretir.
alıntıdır.
Bunun mesela karşılığı aslında :
$kod = substr(str_shuffle(str_repeat("0123456789abcdefghijklmnopqrstuvwxyz", 5)), 0, 5);Bunun dışında bunun unique olmama şansı var, % kaçtır derseniz 5 x karaktersayısı'nın karaktersayı katı kadardır. Çok küçük de olsa eğer programlamada gereği kadar deneyiminiz var ise, bunu riske atmazsınız. Sonra milyon satırın arasında bunu düşünmeniz saçları beyazlatır.
ps : alıntıdır.
function uniqerand($len = 7) {
$word = array_merge(range('a', 'z'), range('A', 'Z'), range('0', '9'));
shuffle($word);
return substr(implode($word), 0, $len);
}
echo 'ABC'.uniqerand();Bu mantıklı bir kod, fakat yukarıdaki argüman bunun içinde malesef geçerli bu unique bir sonuç değildir, unique olması tahmin edilen bir sonuçtur.
md5(time());
benzersiz üretir.
Bu tamamen yanlış, çok basitçe deneyebilirsiniz;
for ($i =0; $i<=10;$i++) echo "$i - " . md5(time()) . "<br>";
Sonuç ;
Buradaki mantık bir milisaniyede birden fazla işlem olmaz ise geçerli olur fakat gösterdiğim gibi güvenilir yöntem değildir.
$key = strtoupper(md5(microtime().rand(0,99999)));
$key = "ABC".$key;
Bu çok çok daha mantıksal bir unique id, zaten unique id nin çalışma mantığına çok yakın birazdan anlatacağım. Bununda denk gelme olasılığı bir microsaniyede 9999/1.
Öncelikle belirteyim yukarıdakinlerin hiçbirisi yanlış olarak kabul edilmeye bilir, farklılık sizinle alakalıdır, ben kodumda milyarda bir bile şansa atmak istemem (mutlakaki yapıyorumdur bende yanlış ama bunun gibi konuları farkedersem düzeltirim)
Şimdi neden unique id gerçek cevap dedim ona gelelim.
Unique id nasıl çalışıyor ;
Alıntı
$m=microtime(true);
sprintf("%8x%05x\n",floor($m),($m-floor($m))*1000000);
ps : Alıntıdır.
Yani;
ilk 8 karakter micro time, float karşılının in hex karşılığıdır;
yani
$m=microtime(true);
$m = dechex($m);
$m = substr($m,0,8);
gibi (tersten)
bir micro time fload olarak "1382632819.6166" gibi sonuç döndürür.
yukarda arkadaşın yaptığı microtime orneğine çok yakın
Bunun yanına sonuna microtime ı komple fload olarak ekler ve bunu hex yapar.
Dolayısı ile bunun aynı gelme ihtimali yukarıda yazılan tüm değerlenden kat kat daha düşük(float to dec dex to bin x microsüre).
Benim gerisi gereksiz olmuş önerim buradan geliyordu.
Bunun dışında gerçek eşsiz bir id istiyorsan malesefki diğer opsionları kayıt ettirmekten başka şansın yok. Gerçek unique id başka şekilde elde edilemiyor.Bir field tutup onu arttırabilir oradaki değer üzerine fonksion yazabilirsin.
Bunun için ben daha önce rand değerler ve doğrusallık üzerine bişey yazmıştım. Türkiyedeki harddiskimde duruyor olsa şimdi bu yazıya güzel giderdi.
İncecik bir dipnot;
Konuya polimiğe dönüşecek bişey yerine, mesleği ileriye götürecek birşey söylemeyecekseniz lütfen zahmet etmeyin. Kimseye bir yararı yok.