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