2009-09-19 4 views

cevap

19

DÜZENLEME:

Olmadı! Bu eski cevabımı unuttum. Naifliğimin yarattığı karışıklığı açıklığa kavuşturmak için (aşağıda verilen yorumlarla tutarlı olarak): MD5 (doğaları gereği en kullanışlı karmaşıklar gibi) enjeksiyonu değildir, bu nedenle çıktılarının tüm girdiler için benzersiz olması garanti edilmez. Karma çarpışmalar bir sorunsa (bu durumda,), bu teknik kullanılarak, aynı anahtarın önceden oluşturulmuş olup olmadığının kontrol edilmesi gerekir. uniqid yana


Hiç iki kez aynı birine içine edeceğiz şansı neredeyse yoktur, guıd üretmek için mikrosaniye geçerli saati kullanır.

Sadece benzersiz dosya isimleri yapmak için kullanıyorsanız, uniqid() yeterli olacaktır. Kullanıcıların kılavuzu tahmin etmesini önlemek istiyorsanız, bunu daha da zorlaştırabilir ve md5 de yapabilirsiniz.

+1

ben :) –

+4

Ama MD5 gelmez bunu md5'ing fikir gibi için çalıştığını benzersizliği koru. – Gumbo

+2

Zaten benzersiz bir anahtar md5 ise, benzersiz kalır. – BraedenP

6

GUID, Microsoft'un UUID sürümü. PHP'nin uniqid, UUID'nin 4 sürümüdür. Kesinlikle yeterince iyi.

2

Ben de .net api çağıran ve bu fonksiyon guid formatında bir anahtar oluşturmak için GUID oluşturmak istiyorum ve bana

function generateGuid($include_braces = false) { 
    if (function_exists('com_create_guid')) { 
     if ($include_braces === true) { 
      return com_create_guid(); 
     } else { 
      return substr(com_create_guid(), 1, 36); 
     } 
    } else { 
     mt_srand((double) microtime() * 10000); 
     $charid = strtoupper(md5(uniqid(rand(), true))); 

     $guid = substr($charid, 0, 8) . '-' . 
       substr($charid, 8, 4) . '-' . 
       substr($charid, 12, 4) . '-' . 
       substr($charid, 16, 4) . '-' . 
       substr($charid, 20, 12); 

     if ($include_braces) { 
      $guid = '{' . $guid . '}'; 
     } 

     return $guid; 
    } 
}