39 thread_local std::mt19937_64 rng((std::random_device{})());
40 thread_local uint64_t last_ts = 0;
41 thread_local uint16_t counter = 0;
43 const uint64_t ts_ms =
now_unix_ms() & 0x0000FFFFFFFFFFFFULL;
45 if (ts_ms == last_ts) {
53 const uint16_t rand12 = counter & 0x0FFF;
56 std::uniform_int_distribution<uint64_t> dist62(0, ( (1ULL<<62) - 1 ));
57 const uint64_t rand62 = dist62(rng);
59 std::array<uint8_t,16> bytes{};
60 for (
int i = 0; i < 6; ++i)
61 bytes[i] =
static_cast<uint8_t
>((ts_ms >> (8*(5-i))) & 0xFF);
63 bytes[6] =
static_cast<uint8_t
>((7u << 4) | ((rand12 >> 8) & 0x0F));
64 bytes[7] =
static_cast<uint8_t
>(rand12 & 0xFF);
66 bytes[8] =
static_cast<uint8_t
>(0x80 | ((rand62 >> 56) & 0x3F));
67 for (
int i = 0; i < 7; ++i)
68 bytes[9 + i] =
static_cast<uint8_t
>((rand62 >> (48 - 8*i)) & 0xFF);