Maison >développement back-end >tutoriel php >Comment générer des UUID v4 valides en PHP ?

Comment générer des UUID v4 valides en PHP ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-18 09:19:14536parcourir

How to Generate Valid v4 UUIDs in PHP?

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 :

  • time_hi_and_version (bits 4-7 du 7ème octet)
  • clock_seq_hi_and_reserved (bits 6 et 7 du 9ème octet) octet)

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn