【发布时间】:2020-01-18 05:58:26
【问题描述】:
我用 JAVA 开发了一个软件,我需要在我的数据库中注册用户机器。
每台用户机器必须是唯一的,如果用户从另一台机器登录,它应该被检测到。
为此,我使用 wmic 命令来获取 ProcessorId 和 Baseboard SerialNumber。
我将基板序列号附加到 processorId 以获得更多唯一性。
但问题是我为 2 台不同的机器获得了相同的 ProcessorId+SerialNumber。
例如:机器 1 = abcd-123
机器 2 = abcd-123
还有底板序列号,提供“N/A”、“Unknown”、“To be field by O.E.M”等输出。
我想到了wmic csproduct get UUID,它给出了主板UUID,
但我害怕重复,因为许多用户已经注册了他们的机器并使用了该软件.
情况
用户 1 已注册机器文本 abcd-123(processorId-basebord Sr No)
现在用户 2 第一次使用不同的机器登录系统
具有相同的机器文本,即 abcd-123
在服务器验证机器时,用户 2 的机器显示为已注册,因此用户 2 无法继续。
请帮我解决问题。
【问题讨论】:
-
如果这个应用程序可以连接到互联网,你为什么不只是一些基于auto_increment的数据库表,所以每次新用户注册时,你都会得到一个唯一的ID。
-
不,我需要一台机器来注册一个用户。
-
使用 Java UUID 将是一个很好的选择。
-
主板UUID可以重复:nextofwindows.com/…
-
您应该编辑您的问题以回答我在“Unique Random Identifiers”中给出的六个问题,因为它们将帮助您决定如何最好地生成唯一标识符。例如,如果您有一种简单的方法来检查 ID 的唯一性或者您可以容忍重复 ID 的风险,那么随机 UUID(例如,通过
java.util.UUID的randomUUID方法)是合适的。