Générer des UUID v4 valides en PHP
Déterminer le format correct pour générer des UUID v4 valides en PHP peut être difficile. Un UUID (Universally Unique Identifier) doit respecter un modèle spécifique : "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx", où "y" représente soit un 8, un 9, un A ou un B.
Solution existante et limitations
Une solution tentée consiste à décomposer l'UUID en composants et à utiliser la génération de nombres aléatoires pour chaque section. Cependant, il ne parvient pas à définir correctement la valeur "y".
Correction de la fonction
Pour corriger ce problème, nous devons effectuer des manipulations de bits spécifiques sur les données générées. . Selon RFC 4122 - Section 4.4, les bits suivants nécessitent une modification :
Fonction mise à jour
Voici la fonction PHP mise à jour qui génère des UUID v4 valides :
function uuidv4() { $data = random_bytes(16); $data[6] = chr(ord($data[6]) & 0x0f | 0x40); // set version to 0100 $data[8] = chr(ord($data[8]) & 0x3f | 0x80); // set bits 6-7 to 10 return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4)); }
Génération aléatoire Données
Pour générer des données suffisamment aléatoires, il est recommandé d'utiliser soit openssl_random_pseudo_bytes() ou random_bytes() (pour PHP 7 et supérieur). Pour les anciennes versions de PHP, openssl_random_pseudo_bytes() peut être utilisé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!