Come generare un UUID versione 4 con PHP

Gli UUID (Universally Unique Identifier) sono identificatori univoci globali utilizzati in vari contesti, come nel database management, nella generazione di chiavi primarie, e in altre situazioni in cui è necessario identificare in modo univoco un elemento. Esistono diverse versioni di UUID, e una delle più comuni è l'UUID versione 4, che è basato su numeri casuali.

Un UUID versione 4 è composto da 32 cifre esadecimali, suddivise in cinque gruppi separati da trattini, nella forma xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx. Le cifre x sono generate in modo casuale, mentre la cifra y è uno di 8, 9, A, o B, e indica che si tratta di un UUID versione 4.

PHP non include una funzione nativa per generare UUID, ma è relativamente semplice crearne uno utilizzando le funzioni disponibili per la generazione di numeri casuali e la formattazione delle stringhe.

Ecco un esempio di funzione PHP per generare un UUID versione 4:


function generateUUIDv4() {
    // Genera 16 byte (128 bit) di dati casuali o pseudo-casuali
    $data = openssl_random_pseudo_bytes(16);

    // Imposta la versione su 4 (0100 in binario)
    $data[6] = chr(ord($data[6]) & 0x0f | 0x40);

    // Imposta i primi due bit del settimo byte su 10 per rispettare RFC 4122
    $data[8] = chr(ord($data[8]) & 0x3f | 0x80);

    // Converte i byte in una stringa esadecimale
    return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}

// Esempio di utilizzo
echo generateUUIDv4();

Nel codice sopra:

  1. Generazione di byte casuali: La funzione openssl_random_pseudo_bytes(16) genera 16 byte di dati casuali (128 bit). Questo è esattamente il numero di bit richiesti per un UUID.

  2. Impostazione della versione: Il 7° byte dell'array $data viene manipolato per impostare la versione su 4. Viene fatto utilizzando l'operatore AND con 0x0f per mantenere gli ultimi 4 bit, e OR con 0x40 per impostare i primi 4 bit a 0100.

  3. Impostazione dei bit varianti: Il 9° byte viene manipolato per impostare i primi due bit su 10, che è richiesto per la conformità alla RFC 4122.

  4. Conversione in formato UUID: I byte vengono convertiti in una stringa esadecimale e poi formattati secondo lo schema 8-4-4-4-12.

Un'altra opzione per generare UUID in PHP è utilizzare una libreria di terze parti, come ramsey/uuid, che è molto popolare e facile da usare.

Puoi installare la libreria ramsey/uuid tramite Composer:


composer require ramsey/uuid

Una volta installata la libreria, puoi generare un UUID v4 con il seguente codice:


require 'vendor/autoload.php';

use Ramsey\Uuid\Uuid;

$uuid = Uuid::uuid4();
echo $uuid->toString();

Vantaggi:

  • Affidabilità: Questa libreria è ben mantenuta e ampiamente utilizzata nella comunità PHP.
  • Funzionalità: Supporta tutte le versioni di UUID, non solo la versione 4.
  • Facilità d'uso: Riduce al minimo la complessità di generare UUID conformi alle specifiche.

Conclusione

Generare un UUID versione 4 in PHP è un'operazione relativamente semplice, che può essere effettuata con una funzione personalizzata o utilizzando una libreria di terze parti come ramsey/uuid. Entrambi i metodi garantiscono la generazione di UUID validi e unici, ma l'uso di una libreria può semplificare ulteriormente il processo e fornire una maggiore flessibilità.

Torna su