• 23-10-2013, 16:31:12
    #10
    Üyeliği durduruldu
    lastwisher adlı üyeden alıntı: mesajı görüntüle
    bundan sonra yazılanlar gereksiz olmuş.
    uniqid 'yi istediğimiz gibi kullanamayız ama standart kalıp.
  • 23-10-2013, 17:50:41
    #11
    Üyeliği durduruldu
    lastwisher adlı üyeden alıntı: mesajı görüntüle
    bundan sonra yazılanlar gereksiz olmuş.
    herkes ayrı ayrı alternatif sunmuş. forumdaki en iyi şekilde cevaplanan mesajalrdan biridir kesinlikle.bu konudaki tek gereksiz mesaj sizinki olsa gerek.
  • 24-10-2013, 19:56:13
    #12
    Kimlik doğrulama veya yönetimden onay bekliyor.
    madly0011 adlı üyeden alıntı: mesajı görüntüle
    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.

    Nietzsche adlı üyeden alıntı: mesajı görüntüle
    /* Ş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.


    BR9 adlı üyeden alıntı: mesajı görüntüle
    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.


    madly0011 adlı üyeden alıntı: mesajı görüntüle
    $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.
  • 24-10-2013, 21:09:08
    #13
    Üyeliği durduruldu
    lastwisher adlı üyeden alıntı: mesajı görüntüle
    İ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.
    bu söylediğinizi uygulayabilirseniz polemik kalmaz...

    butona basıldığında uid isteyen bir vatandaşa oturupta şu kodda aynı gelme olasılığı budur bu koddda aynı gelme olsalığı budur. eğer olasılığı sıfra indirmek isterseniz sql kontrolüne gidin diye ders mi verelim. veyahut oturup buttonu js ini hazır edip hazır haldemi verelim.
    $key = strtoupper(md5(microtime().rand(0,99999))); bunu alır
    $key = strtoupper(md5(microtime().rand(0,9999999999999999 ))); yaparsın olasılık artar. hem saniyenin onbinde bir bir zamanda kaç kişi butona basacakki aynı id gelsin. uzaya mekik mi yollayacak arkadaş? zaten büyük bir proje yapacak deneyimi yok belliki. o zaman ona kod değil mantık öğretmek gerek. ve yukarıda gördüğüm kadarıyla (kodları sizin gibi incelemedim. zaten incelemek konu sahibine düşer zannımca) herkes bir şeyler yazmış. doğru veya yanlış. Şimdi siz belkide birilerini incittiniz. kimse burada yardım isteklerine cevap verip para almıyor. birde sizin gibiler tarafından aşağılanarak ne diye birilerine yardım etsinki? ne diye sizin gibi yaptığı işten soğutanların meydanında at koştursun ki?

    Alıntı
    Ü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.
    mesaja başlayışınızı görünce sizi php nin tanrısı zannettim biraz. biraz indirin üstadım biraz indirin o burnunuzu.
  • 24-10-2013, 22:05:22
    #14
    lastwisher adlı üyeden alıntı: mesajı görüntüle
    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.
    ben tam olarak anlamadım ... yani kod unique string üretmiyormu?

    function uniqerand($len = 7) {
        $word = array_merge(range('a', 'z'), range('A', 'Z'), range('0', '9'));
        shuffle($word);
        return substr(implode($word), 0, $len);
    }
    
    $i = 0;
    while($i < 20){
        echo $i.' - ABC'.uniqerand().'<br />
        ';    
        $i++;
    }
    while döngüsü içinde denemede çıkan sonuç,

    0 - ABCXhNQ0lu
    1 - ABC0RSqdaL
    2 - ABCkWfFTYI
    3 - ABCMzDeoV5
    4 - ABCAm0fiG6
    5 - ABCi3oQJWE
    6 - ABCNVt0CnT
    7 - ABCilT8ar9
    8 - ABCdY2FQys
    9 - ABC0zBkFhD
    10 - ABCyhoW4dw
    11 - ABCymxMSHp
    12 - ABCPbOL2sf
    13 - ABCL4AVM6B
    14 - ABCPcJ8v0s
    15 - ABCmRJjEOZ
    16 - ABCY6FRGhC
    17 - ABCd0t8FRz
    18 - ABCjCN7VAb
    19 - ABCmA987Do
    siz bu çıktının tahmin edilecenimi söylüyorsunuz?
  • 24-10-2013, 22:27:07
    #15
    @madly0011 Üstadım, dediğim gibi yürür gider bu konuşma.Ortaya bişey koymuyorsunuz, koyan insanlara çemkiriyorsunuz. Burnumla ilgili yorumunuzu, bilginizle örterseniz rahatsız edici olmaz.


    betabil adlı üyeden alıntı: mesajı görüntüle
    ben tam olarak anlamadım ... yani kod unique string üretmiyormu?

    function uniqerand($len = 7) {
        $word = array_merge(range('a', 'z'), range('A', 'Z'), range('0', '9'));
        shuffle($word);
        return substr(implode($word), 0, $len);
    }
    
    $i = 0;
    while($i < 20){
        echo $i.' - ABC'.uniqerand().'<br />
        ';    
        $i++;
    }
    while döngüsü içinde denemede çıkan sonuç,

    0 - ABCXhNQ0lu
    1 - ABC0RSqdaL
    2 - ABCkWfFTYI
    3 - ABCMzDeoV5
    4 - ABCAm0fiG6
    5 - ABCi3oQJWE
    6 - ABCNVt0CnT
    7 - ABCilT8ar9
    8 - ABCdY2FQys
    9 - ABC0zBkFhD
    10 - ABCyhoW4dw
    11 - ABCymxMSHp
    12 - ABCPbOL2sf
    13 - ABCL4AVM6B
    14 - ABCPcJ8v0s
    15 - ABCmRJjEOZ
    16 - ABCY6FRGhC
    17 - ABCd0t8FRz
    18 - ABCjCN7VAb
    19 - ABCmA987Do
    siz bu çıktının tahmin edilecenimi söylüyorsunuz?
    Yanlış anlaşılma olmuş, çıktığının tahmin edileceğini değil "unique" olmasının tahmin edildiğini(öngörüldüğünü) yazdım.

    Çok daha basit bi örnek vereyim 1 ila 10 arasında random bir sayı alıp bunu eşsiz kabul etmeniz ile 1-1000000 arasındaki bir sayıyı rasgele alıp eşsiz kabul etmeniz arasındaki tek fark olasılıktır. Tekrar eden bir sabitle üretilen hiçbir algoritma eşsiz sonuç üretmez.
    Yani sizin orada kullandığınız suffle ın üretebileceği bir kombinasyon sınırı vardır mesela a-z 26 karakter 26!(faktoriyel)x27!x26x... diye gider ( detalı bilgi http://www.matematiktutkusu.com/tags...+form%FClleri/ )
    yani belirli bir olasılıkda tekrar etme şansı vardır. (çoook küçük bir olasılık)

    Benim bahsettğim sonuç çok uç noktalar, fakat şunu unutmamak lazım mesela "milyonda bir ihtimal" dediğiniz ihtimal günümüzde çok kolay tekrar edebilir bir ihtimal, benim it danışmanlığı yaptığım bir firma var, her yıl 10-12 milyar satır veri arşivliyor, şimdi milyonda bir hata yapan bir sistem binlerce hata yapar bu ölçeklerde.

    Bunlar basit kullanımlarda sorun çıkartmasada, uzun vadeli kullanımlarda sorun çıkartabiliyor.Ve bu micro ölçekli bir bugı milyonlarca satır kod arasından ayıklamak ölüm.


    PS : Umarım yanlış anlatmadım kendimi, yaptığınız yanlış demek istemedim,%100 doğru değil demek istedim.

    Saygılar tekrardan.
  • 24-10-2013, 22:51:22
    #16
    @lastwisher verdiğiniz bilgiler asıl sorunun mantığını aşıyor ...

    soru;

    Quismo adlı üyeden alıntı: mesajı görüntüle
    Arkadaşlar php - js ile
    bir generate butonuna bastığımızda 10 haneli(harf-sayı) örnek ilk 3ü hep ABC olacak şekilde kod nasıl üretebiliriz acaba ?
    A-B, a-b, 0-9 = 62 karakter, kod başlangıcındaki ABC silinirse 7 karakter,

    bu kombinasyonla hesaplanırsa,



    491796152 de 1 ihtimal ... 7 karakterli bir string için gayet makul olasılık, kafa karışıklığı gereksiz
  • 24-10-2013, 23:46:34
    #17
    Üyeliği durduruldu
    matematik dehaları konuya lütfen
  • 25-10-2013, 00:37:17
    #18
    Bende de şöyle bir şey var ;
    function generateHash($length) {
    
        $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        return substr(str_shuffle($chars),0,$length);
    
    }
    yada
    function generateRandomString($length = 10) {
        $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $randomString = '';
        for ($i = 0; $i < $length; $i++) {
            $randomString .= $characters[rand(0, strlen($characters) - 1)];
        }
        return $randomString;
    }
    Arkadaşlar iyi diyorsunuz hoş diyorsunuz da bunu tam uniq yapmak için ne yapmak gerek. Mesela ben her session için bir token üretiyorum, ama ürettiğim tokenların bir şekilde aynı olma olasılığı var elbette, nasıl çözeceğiz bu sorunu ? time() ile o anki değeri alsak microsaniye ile bu random değeri birleştirsek bir çözüm olur mu ? Aynı microsaniye içersinde aynı kodun üretilme olasığını hesaba katmaz isek tabi öyle bir şey olacaksa da olsun.