Generieren von GUID unter PHP

Howto: Globally Unique Identifier Generierung, kurz GUID mittels PHP, inklusive Fallback für den Fall, dass com_create_guid auf dem Server nicht existiert.

Die Funktion zum Generieren eines MD5 Strings wird gerade bei der Verwendung von Unique-Ids oft genommen um diese Ids zu generieren. Es ist aber bekannt, dass gerade MD5 Hashs nicht 100% sicher sind. Eine weitere Möglichkeit bietet hier die Generierung bzw. Verschlüsselung mittels sha1, z.B. um Passwörter in der Datenbank zu verschlüsseln.


Benötigt man aber nur eine Unique Identifier, kann man auch die GUID Generierung unter PHP verwenden. Unter Windows stellt dies grundsätzlich kein Problem dar, da die Funktion com_create_guid() generell unter Windows auch verfügbar ist. Unter allen anderen Systemen wird es dann aber schwierig, da die GUID nicht nur eine Abfolge von zufälligen Zeichen ist, sondern hier auch eine RFC Definition existiert.


Eine RFC 4211 konforme Generierung unter PHP gewährleistet die folgende Funktion auch auf nicht Windowssystemen, die auch die siebente und neunte Stelle der GUID richtig setzt, und auf Windowsservern die GUID auch über com_create_guid() generiert.


 
function GUID() {
   if (function_exists('com_create_guid')) {
      $sGUID = com_create_guid();
      $sGUID = preg_replace('/(\{|\})/', null, $sGUID );
   } else {
      $sGUID = null;
      for ($i=1; $i<=16; $i++)
      {
         $b = (int)mt_rand( 0, 0xff );
         if ( 7 == $i) { $b &= 0x0f; $b |= 0x40; }
         if ( 9 == $i) { $b &= 0x3f; $b |= 0x80; } 
         $sGUID .= sprintf("%02s", base_convert($b,10,16));
         if ( 4 == $i || 6 == $i || 8 == $i || 10 == $i ) { $sGUID .= '-'; }
      }
   }
   return $sGUID;
}