Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Menjana UUID V4 yang Sah dalam PHP?

Bagaimanakah Saya Boleh Menjana UUID V4 yang Sah dalam PHP?

Linda Hamilton
Linda Hamiltonasal
2024-12-14 00:03:10614semak imbas

How Can I Generate a Valid V4 UUID in PHP?

Menjana Fungsi PHP yang Sah untuk UUID V4

Fungsi sedia ada PHP untuk menjana UUID v4 mempunyai kecacatan dalam memastikan pematuhan kepada format khusus standard v4. Piawaian menyatakan bahawa bit tinggi oktet ke-9 dan bit terpelihara hendaklah 10.

Mengecam Isu

Penyebabnya ialah pengendalian fungsi bit ini yang tidak konsisten. Untuk membetulkannya, pengubahsuaian khusus perlu dibuat mengikut RFC 4122 Seksyen 4.4.

Penyelesaian

Fungsi yang diperhalusi di bawah melaksanakan tweak yang diperlukan:

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));
}

The data dijana menggunakan random_bytes, memastikan rawak dan keselamatan. Penukaran heks seterusnya menggunakan vsprintf untuk mengekalkan format yang betul.

Keserasian PHP 5 dan Lebih Lama

Untuk versi PHP sebelum 7.0, apabila random_bytes tidak tersedia, pelaksanaan alternatif disediakan:

$data = openssl_random_pseudo_bytes(16, $strong);
// ensure the result is cryptographically strong
assert($data !== false && $strong);

Nota Tambahan

Adalah penting untuk gunakan penjana data rawak yang kuat secara kriptografi seperti random_bytes atau openssl_random_pseudo_bytes untuk menjamin keteguhan UUID anda. Pertimbangkan untuk meneroka kaedah alternatif untuk menjana data rawak jika anda mempunyai keperluan khusus.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjana UUID V4 yang Sah dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn