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.
Penyebabnya ialah pengendalian fungsi bit ini yang tidak konsisten. Untuk membetulkannya, pengubahsuaian khusus perlu dibuat mengikut RFC 4122 Seksyen 4.4.
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.
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);
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!