在实际业务处理中,有时需要生成全局唯一ID来区别同类型的不同事物,介绍一下几种方式及其C++实现
//获取全局唯一ID //server_id为服务的id,因当同一个服务部署在多个服务器上时,需要区别 unsigned long long GetUniqueID(unsigned int server_id) { static unsigned long long seq_id = 0; unsigned long long seq = seq_msg_id++ ; seq = (seq<<8); seq = (seq>>8); unsigned long long tag = ((unsigned long long)server_id<<56); seq = (seq | tag) ; return seq ; } /** 获取全局唯一ID,且ID为奇数 */ unsigned long long GetOddID(unsigned int server_id) { unsigned long long id = GetUniqueID(server_id); while (true) { if ((id & 0x01) == 0x01) { return id; } else { id = GetUniqueID(server_id); } } } //利用MD5库提供的64位哈希函数,来将字符串生成相应的hash值 //从而可得到经md5转化后的报文摘要 //数据库的UUID