14 #define UUID_VERSION 4
17 static inline std::string uuid4() {
19 std::stringstream uuid_sstr;
22 auto seed = std::chrono::system_clock::now().time_since_epoch().count();
23 std::default_random_engine rand((
unsigned int)seed);
24 std::uniform_int_distribution<int> dist(0, 255);
31 uuid[8] = (uuid[8] & 0x3F) | 0x80;
33 uuid[6] = (uuid[6] & 0x0F) | ((
UUID_VERSION << 4) & 0xF0);
35 uuid_sstr << std::internal << std::setfill(
'0') << std::hex
36 << std::setw(2) << uuid[0]
37 << std::setw(2) << uuid[1]
38 << std::setw(2) << uuid[2]
39 << std::setw(2) << uuid[3] <<
"-"
40 << std::setw(2) << uuid[4]
41 << std::setw(2) << uuid[5] <<
"-"
42 << std::setw(2) << uuid[6]
43 << std::setw(2) << uuid[7] <<
"-"
44 << std::setw(2) << uuid[8]
45 << std::setw(2) << uuid[9] <<
"-"
46 << std::setw(2) << uuid[10]
47 << std::setw(2) << uuid[11]
48 << std::setw(2) << uuid[12]
49 << std::setw(2) << uuid[13]
50 << std::setw(2) << uuid[14]
51 << std::setw(2) << uuid[15];
53 return uuid_sstr.str();