Maison > développement back-end > tutoriel php > Comment puis-je générer un UUID V4 valide en PHP ?

Comment puis-je générer un UUID V4 valide en PHP ?

Linda Hamilton
Libérer: 2024-12-14 00:03:10
original
606 Les gens l'ont consulté

How Can I Generate a Valid V4 UUID in PHP?

Génération d'une fonction PHP valide pour les UUID v4

La fonction PHP existante pour générer des UUID v4 présente un défaut pour garantir le respect du format spécifique de la norme v4. La norme précise que le bit haut et les bits réservés du 9ème octet doivent être égaux à 10.

Reconnaître le problème

Le coupable est la gestion incohérente de ces bits par la fonction. Pour le corriger, des modifications spécifiques doivent être apportées conformément à la section 4.4 de la RFC 4122.

La solution

La fonction affinée ci-dessous implémente les ajustements nécessaires :

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));
}
Copier après la connexion

Le les données sont générées à l'aide de random_bytes, garantissant le caractère aléatoire et la sécurité. La conversion hexadécimale suivante utilise vsprintf pour conserver le format approprié.

Compatibilité PHP 5 et versions antérieures

Pour les versions PHP antérieures à 7.0, où random_bytes n'est pas disponible, une implémentation alternative est fournie :

$data = openssl_random_pseudo_bytes(16, $strong);
// ensure the result is cryptographically strong
assert($data !== false && $strong);
Copier après la connexion

Remarques supplémentaires

Il est important d'utiliser des données aléatoires cryptographiquement fortes des générateurs comme random_bytes ou openssl_random_pseudo_bytes pour garantir la robustesse de vos UUID. Pensez à explorer des méthodes alternatives pour générer des données aléatoires si vous avez des exigences spécifiques.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal