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
Lepaskan: 2024-12-14 00:03:10
asal
606 orang telah melayarinya

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));
}
Salin selepas log masuk

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);
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan