我正在构建一个应用程序(在 java 中),我想为自己提供一些对其性能的测量。我正在计时多个长时间运行的进程,并且我有一个用于接收指标的 Web 服务器,但是我想为特定用户创建一个唯一的数字(我的程序不需要登录)在计算机上。
因此,如果 Joe 登录到计算机 A 并运行我的应用程序,它将给他一个唯一的号码,例如 1234。然后如果 Jane 登录到同一台计算机,它将使用不同的号码,例如 4321。但是,如果 Joe 登录到计算机B,它将完全创建一个单独的数字,例如 5678。另外(只是为了澄清)如果乔重新登录到计算机 A,它仍然会产生数字 1234。
另外,为了让它更具挑战性,如果同一台计算机在不同的网络上,那么我最好想要一个不同的 ID。
这些数字是任意的,并且会比这更长。到目前为止,我的代码8akb7d3n7lp1i1jo6apfhegp593kja5hg38b6o1a5godm38g97omm7bmc3jekc6apopgjhf9g
从以下位置生成为我的 UID:
try {
byte[] mac = NetworkInterface.getByInetAddress(InetAddress.getLocalHost()).getHardwareAddress();
String names = new BigInteger(mac).toString(16) + InetAddress.getLocalHost().getHostAddress() + get("user.name") + get("os.version") + get("java.vendor");
BigInteger uid = new BigInteger(names.getBytes());
thisUsersUid = uid.toString(26);
} catch (SocketException ex) {
Logger.getLogger(TimingLogger.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnknownHostException ex) {
Logger.getLogger(TimingLogger.class.getName()).log(Level.SEVERE, null, ex);
}
我不希望这些信息容易阅读(如您所见names="-f4b86eb8ee1192.168.0.20lee10.6.8Apple Inc."
),因此我将为其添加一个散列函数。
所以我的问题,毕竟这些宣传是:这是一个好方法吗?有没有比这更好的图书馆?还是我只是想要太多?
在此先感谢(即使是那些说:为什么?)