获取Windows唯一识别码

我们时常会有唯一认证某台机器的需求,比如在软件注册和激活上,如何保证激活的软件副本和安装机器的对应。很常见的方式是获取一个唯一识别码,并传给后端进行存储。验证时匹配这个唯一识别码即可。

唯一识别码最好和系统无关,这样在用户重装系统后仍然可以激活软件。

以前我们常用的是网卡mac地址,但是网卡mac地址很容易修改,用户也可能有多张网卡并经常更换。

另外一种选择是CPU序列号,但是近年的Intel CPU不再区分同一批次中各个CPU的序列号,这样就有可能两台电脑获得的CPU序列号是一样的。在办公室环境中,由于基本大家电脑都是一批购买,很容易出现一个办公室里所有CPU序列号都一样的悲剧。

最后我选用了微软自己的推荐,也是Win10激活使用的唯一识别码。微软叫它CSP UUID,实际上就是主板识别码。和硬件相关且无法很容易的修改,是最佳的唯一识别码选择。

CMD中可以使用以下命令获取。

1
wmic csproduct get uuid

C#参考代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
using System.Management;
string GetSystemId()
{
string systemId = null;
using (ManagementObjectSearcher mos = new ManagementObjectSearcher("select * from Win32_ComputerSystemProduct"))
{
foreach(var item in mos.Get())
{
systemId = item["UUID"].ToString();
}
}
return systemId;
}