change:uuid生成改成random模拟
This commit is contained in:
parent
931380105b
commit
fbc26d565f
@ -47,7 +47,7 @@ public:
|
||||
public:
|
||||
static ofString now_time();
|
||||
static ofString get_file_size(long long bytes);
|
||||
static ofString get_uuid();
|
||||
static ofString get_sim_uuid();
|
||||
static uint64_t get_timestamp_ms();
|
||||
static uint64_t get_timestamp_s();
|
||||
};
|
||||
|
@ -1,18 +1,13 @@
|
||||
#include "of_util.h"
|
||||
#include <chrono>
|
||||
#include <iomanip>
|
||||
#include <random>
|
||||
#include <sstream>
|
||||
#include <utf8.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
#endif
|
||||
// 这里这样写是为了处理头文件排序问题
|
||||
#ifdef _WIN32
|
||||
#include <rpcdce.h>
|
||||
#else
|
||||
#include <uuid/uuid.h>
|
||||
#endif
|
||||
|
||||
namespace ofen {
|
||||
void CMutBuffer::push(const char* data, int len)
|
||||
@ -123,31 +118,36 @@ ofString OfUtil::get_file_size(long long bytes)
|
||||
return oss.str();
|
||||
}
|
||||
|
||||
ofString OfUtil::get_uuid()
|
||||
ofString OfUtil::get_sim_uuid()
|
||||
{
|
||||
#ifdef _WIN32
|
||||
UUID uuid;
|
||||
UuidCreate(&uuid);
|
||||
ofChar* pUuid = nullptr;
|
||||
#ifdef UNICODE_OFSTR
|
||||
UuidToStringW(&uuid, (RPC_CSTR*)&pUuid);
|
||||
#else
|
||||
UuidToStringA(&uuid, (RPC_CSTR*)&pUuid);
|
||||
#endif
|
||||
ofString ret(pUuid);
|
||||
#ifdef UNICODE_OFSTR
|
||||
RpcStringFreeW((RPC_CSTR*)&pUuid);
|
||||
#else
|
||||
RpcStringFreeA((RPC_CSTR*)&pUuid);
|
||||
#endif
|
||||
return ret;
|
||||
#else
|
||||
uuid_t uuid;
|
||||
uuid_generate(uuid);
|
||||
char uuid_str[37];
|
||||
uuid_unparse(uuid, uuid_str);
|
||||
return ofString(uuid_str);
|
||||
#endif
|
||||
static std::random_device rd;
|
||||
static std::mt19937 gen(rd());
|
||||
static std::uniform_int_distribution<uint16_t> dis(0, 255);
|
||||
|
||||
// UUID 格式:xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
|
||||
// 版本4规则:第13位设为 '4',第17位高4位设为 '8'、'9'、'a' 或 'b'
|
||||
std::stringstream ss;
|
||||
|
||||
// 生成16字节的随机数据
|
||||
for (int i = 0; i < 16; ++i) {
|
||||
uint8_t byte = dis(gen);
|
||||
|
||||
// 根据UUID规范调整特定字节
|
||||
if (i == 6) {
|
||||
byte = (byte & 0x0F) | 0x40; // 版本4:第7字节高4位设为0100
|
||||
} else if (i == 8) {
|
||||
byte = (byte & 0x3F) | 0x80; // 变体:第9字节高2位设为10
|
||||
}
|
||||
|
||||
// 将字节转为16进制字符串(2位)
|
||||
ss << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(byte);
|
||||
|
||||
// 插入分隔符:8-4-4-4-12
|
||||
if (i == 3 || i == 5 || i == 7 || i == 9) {
|
||||
ss << "-";
|
||||
}
|
||||
}
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
uint64_t OfUtil::get_timestamp_ms()
|
||||
|
Loading…
x
Reference in New Issue
Block a user