Bu yüzden biraz kazma yapıyorum ve PHP'de geçerli bir v4 UUID üreten bir işlevi bir araya getirmeye çalışıyorum. Gelebildiğim en yakın şey bu. Onaltılık, ondalık, ikili, PHP'nin bitsel operatörleri ve benzerleri hakkındaki bilgilerim neredeyse hiç yok. Bu işlev bir alana kadar geçerli bir v4 UUID oluşturur. Bir v4 UUID şu şekilde olmalıdır:
xxxxxxxx-xxxx- 4 xxx- y xxx-xxxxxxxxxxxx
burada y 8, 9, A veya B'dir. Bu, işlevlerin ona uymadığı için başarısız olduğu yerdir.
Bu alanda benden daha fazla bilgiye sahip birisinin bana bir el verebileceğini ve bu kurala uyması için bu işlevi düzeltmeme yardımcı olacağını umuyordum.
Fonksiyon aşağıdaki gibidir:
<?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;
}
?>
Bana yardım edebilecek herkese teşekkürler.
$newId = exec('uuidgen -r');