需要引入第三方库 md5
根据本机MAC地址以及MD5生成标识符
std::string getMacAddress()
{
std::string cmd = "ifconfig";
std::string macAddress;
// 执行系统命令
FILE* pipe = popen(cmd.c_str(), "r");
if (!pipe) {
std::cerr << "执行命令失败!" << std::endl;
return "";
}
// 读取命令输出
char buffer[128];
while (!feof(pipe)) {
if (fgets(buffer, 128, pipe) != nullptr) {
std::string output(buffer);
// 在输出中查找MAC地址
size_t found = output.find("ether");
if (found != std::string::npos) {
size_t start = found + 6; // "ether"后面的位置
size_t end = output.find(" ", start); // 下一个空格的位置
macAddress = output.substr(start, end - start);
break;
}
}
}
std::string result = macAddress;
for (char& c : result)
{
if (std::islower(c)) // 检查字符是否为小写字母
{
c = std::toupper(c); // 将小写字母转换为大写字母
}
}
// 关闭管道
pclose(pipe);
return result;
}
std::string generateUniqueCode(const std::string &str)
{
std::string macAddress = getMacAddress();
MD5_CTX ctx;
unsigned char digest[16];
MD5_Init(&ctx);
MD5_Update(&ctx, reinterpret_cast<unsigned char*>(const_cast<char*>(macAddress.c_str())), macAddress.length());
MD5_Final(digest, &ctx);
std::stringstream ss;
for (int i = 0; i < 16; ++i)
{
ss << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(digest[i]);
}
std::string mymd5 = ss.str();
std::string newStr = str.substr(0, 6);//只取前面五个字符
std::string temp = newStr + "@" + mymd5;
return temp;
}