在開發應用軟件的時候比較多的情況下會要求生成一個唯一的代碼來確定是那個設備的相關數據,這裏舉例的環境爲Windows 操作系統下的生成唯一代碼的方法。
參與計算的硬件資源ID有 CPUID,主板ID和內存ID;具體樣例代碼如下:
/// <summary>
/// 獲取傳感器ID(16位HASH代碼)
/// </summary>
/// <returns></returns>
private static string GetSensorID()
{
string sensorID = string.Empty;
string basicID = GetCPUID() + GetMotherboardID() + GetPhysicalMemoryID();
System.Security.Cryptography.MD5CryptoServiceProvider mD5CryptoServiceProvider = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] hashedBuff = mD5CryptoServiceProvider.ComputeHash(Encoding.UTF8.GetBytes(basicID));
for (int i = 4; i < 12; i++)
{
sensorID += hashedBuff[i].ToString("X2");
}
return sensorID;
}
/// <summary>
/// 獲得cpu序列號
/// </summary>
/// <returns></returns>
private static string GetCPUID()
{
var myCpu = new ManagementClass("win32_Processor").GetInstances();
var serial = "";
foreach (ManagementObject cpu in myCpu)
{
var val = cpu.Properties["Processorid"].Value;
serial += val == null ? "" : val.ToString();
}
return serial;
}
/// <summary>
/// 獲取主板序列號
/// </summary>
/// <returns></returns>
private static string GetMotherboardID()
{
var myMb = new ManagementClass("Win32_BaseBoard").GetInstances();
var serial = "";
foreach (ManagementObject mb in myMb)
{
var val = mb.Properties["SerialNumber"].Value;
serial += val == null ? "" : val.ToString();
}
return serial;
}
/// <summary>
/// 獲取所有內存信息,參考 CPUID 軟件
/// </summary>
/// <returns></returns>
private static string GetPhysicalMemoryID()
{
string memoryID = "";
ManagementObjectSearcher mos = new ManagementObjectSearcher("select * from Win32_PhysicalMemory");
foreach (var prop in mos.Get())
{
memoryID = memoryID + prop["PartNumber"].ToString().Trim() + prop["SerialNumber"].ToString().Trim();
}
return memoryID;
}