Vì vậy, tôi đã thực hiện một số hoạt động đào xung quanh và tôi đã cố gắng ghép một hàm tạo ra UUID v4 hợp lệ trong PHP. Đây là lần gần nhất tôi có thể đến. Kiến thức của tôi về các toán tử bit, thập phân, nhị phân, nhị phân của PHP và tương tự gần như không tồn tại. Hàm này tạo UUID v4 hợp lệ cho đến một vùng. Một UUID v4 phải ở dạng:
xxxxxxxx-xxxx- 4 xxx- y xxx-xxxxxxxxxxxx
trong đó y là 8, 9, A hoặc B. Đây là nơi các chức năng thất bại vì nó không tuân thủ điều đó.
Tôi đã hy vọng ai đó có nhiều kiến thức hơn tôi trong lĩnh vực này có thể giúp tôi một tay và giúp tôi sửa chữa chức năng này để nó tuân thủ quy tắc đó.
Chức năng như sau:
<?php
function gen_uuid() {
$uuid = array(
'time_low' => 0,
'time_mid' => 0,
'time_hi' => 0,
'clock_seq_hi' => 0,
'clock_seq_low' => 0,
'node' => array()
);
$uuid['time_low'] = mt_rand(0, 0xffff) + (mt_rand(0, 0xffff) << 16);
$uuid['time_mid'] = mt_rand(0, 0xffff);
$uuid['time_hi'] = (4 << 12) | (mt_rand(0, 0x1000));
$uuid['clock_seq_hi'] = (1 << 7) | (mt_rand(0, 128));
$uuid['clock_seq_low'] = mt_rand(0, 255);
for ($i = 0; $i < 6; $i++) {
$uuid['node'][$i] = mt_rand(0, 255);
}
$uuid = sprintf('%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x',
$uuid['time_low'],
$uuid['time_mid'],
$uuid['time_hi'],
$uuid['clock_seq_hi'],
$uuid['clock_seq_low'],
$uuid['node'][0],
$uuid['node'][1],
$uuid['node'][2],
$uuid['node'][3],
$uuid['node'][4],
$uuid['node'][5]
);
return $uuid;
}
?>
Nhờ bất cứ ai có thể giúp tôi ra.
$newId = exec('uuidgen -r');