c# - 在 C# 中获取唯一标识符的最佳方法

标签 c# uniqueidentifier

<分区>

我之前问过类似的问题,但我现在减少了一些对我需要的限制。

我需要使用 C# 在计算机上高效地找到唯一标识符。它应该在任何特定计算机上始终保持不变,并且可以是许多因素的组合 - 只要它易于检索。

我曾考虑过将 MAC 地址用于 WMI 网络查询,但这太慢了,因为通常有 10 个以上的适配器。使用 WHERE IPEnabled=true 子句可能会更好,但我认为可能还有比这更好的东西。

想法?

(P.S. 不一定非得是独一无二的,只要碰撞几率很小就完美了。)

最佳答案

首先获取处理器 ID,如下所示:(添加对 System.Management 的引用)

    ManagementObjectCollection mbsList = null;
    ManagementObjectSearcher mbs = new ManagementObjectSearcher("Select * From Win32_processor");
    mbsList = mbs.Get();
    string id = "";
    foreach (ManagementObject mo in mbsList)
    {
        id = mo["ProcessorID"].ToString();
    }

//然后就可以得到主板序列号了:

    ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard");
    ManagementObjectCollection moc = mos.Get();
    string motherBoard = "";
    foreach (ManagementObject mo in moc)
    {
        motherBoard = (string)mo["SerialNumber"];
    }

你可以把上面两个连接起来得到一个唯一的ID

    string myUniqueID = id + motherBoard;
    Console.WriteLine(myUniqueID);

另请查看此链接 Finding Hardware ID, CPU ID, Motherboard ID, Hard-Disk ID of a computer

关于c# - 在 C# 中获取唯一标识符的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10310328/

相关文章:

c# - C# 数据库访问的建议

c# - LINQ 仅当其中一个字段是特定值时才对多个字段进行分组

c# - 需要C#源码关系图

haskell - Haskell 在 Racket 中有类似 gensym 的东西吗?

c++ - 基于枚举的模板是个好主意吗?

c# - 编程语言错误还是编译器错误?

c# - ASP.net 在长任务之前显示消息

sqlite - SQLITE填充值具有唯一的随机表

java - Java 对象(Eclipse EMF 资源和模型元素)的唯一且可复制的标识符

database-design - 使用数据库表的 ID 作为外部 API 标识符是不是一个坏主意?