function GenerateID() {
$IDData = $IDData ?? random_bytes(16);
assert(strlen($IDData) == 16);
$IDData[6] = chr(ord($IDData[6]) & 0x0f | 0x40);
$IDData[8] = chr(ord($IDData[8]) & 0x3f | 0x80);
return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($IDData), 4));
}