生成特定计算机唯一的ID


问题内容

我正在尝试生成特定计算机唯一的ID。该ID不会随机生成。这将基于计算,以便为计算机A生成的ID将是固定的,并且对于计算机A是唯一的。每次在计算机A上执行程序时,它将继续生成相同的ID,并且在另一台计算机上执行时,它将生成该计算机唯一的另一个ID。这是为了确保两台​​计算机没有相同的ID。

我的挑战: 为了使我的程序能够生成计算机唯一的ID,它需要基于执行该计算机的计算机唯一的种子来执行计算。

我的问题: 如何获得计算机唯一的值,以便可以将该值用作ID生成程序中的种子?

是否可以从该计算机特有的计算机硬件(例如主板)中获得价值?这样,只要不更换计算机的主板,该值很可能不会改变。


问题答案:

MAC地址?每个NIC都具有(为了实际目的)唯一的特性,因此即使用户是双重引导,它也可确保再现性。当然,很少有人交易卡的情况,但
结合其他指标 (不仅可以使用此功能,因为可以更改网卡),还是有可能的。

你怎么会得到它?

public static byte[] getMACAddress() throws SocketException, UnknownHostException {
    InetAddress address = InetAddress.getLocalHost();
    NetworkInterface networkInterface = NetworkInterface.getByInetAddress(address);

    return networkInterface.getHardwareAddress();
}

如果要使用String表示形式,请执行此操作

for (int byteIndex = 0; byteIndex < macAddress.length; byteIndex++) {
    System.out.format("%02X%s", macAddress[byteIndex], (byteIndex < macAddress.length - 1) ? "-" : "");
}

(感谢http://www.kodejava.org/examples/250.html

注意: 如评论中所述,可以欺骗Mac地址。但是您谈论的只是一小部分人在这样做,除非您将其用于反盗版,否则它的独特性就足够了。