java生成机器码

2023-05-26,,

java根据系统参数生成每个计算机的唯一标识。

1. 获取CPU序列号

 /**
* 获取CPU序列号
* @return
* @throws IOException
*/
public static String getCPUSerialNumber() {
String next;
try {
Process process = Runtime.getRuntime().exec(new String[]{"wmic", "cpu", "get", "ProcessorId"});
process.getOutputStream().close();
Scanner sc = new Scanner(process.getInputStream());
String serial = sc.next();
next = sc.next();
} catch (IOException e) {
throw new RuntimeException("获取CPU序列号失败");
}
return next;
}

2.获取 硬盘序列号

 /**
* 获取 硬盘序列号(Windows)
* @return
* @throws IOException
* @throws InterruptedException
*/
public static String getHardDiskSerialNumber() {
try {
Process process = Runtime.getRuntime().exec(new String[]{"wmic", "path", "win32_physicalmedia", "get", "serialnumber"});
process.getOutputStream().close();
Scanner sc = new Scanner(process.getInputStream());
String serial = sc.next();
return sc.next();
} catch (IOException e) {
throw new RuntimeException("获取硬盘序列号失败");
}
}

3. bois版本号(linux)

/**
* bois版本号(linux)
*
* @return
*/
public static String getBoisVersion() {
String result = "";
Process p;
try {
// 管道
p = Runtime.getRuntime().exec("sudo dmidecode -s bios-version");
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
result += line;
break;
}
br.close();
} catch (IOException e) {
System.out.println("获取主板信息错误");
}
return result;
}

4. 获取系统序列号(linux)

/**
* 获取系统序列号(linux)
*
* @return
*/
public static String getUUID() {
String result = "";
try {
Process process = Runtime.getRuntime().exec("sudo dmidecode -s system-uuid");
InputStream in;
BufferedReader br;
in = process.getInputStream();
br = new BufferedReader(new InputStreamReader(in));
while (in.read() != -1) {
result = br.readLine();
}
br.close();
in.close();
process.destroy();
System.out.println("获取序列号:"+result);
} catch (Throwable e) {
e.printStackTrace();
}
return result;
}

5.字符串分割

    private static String getSplitString(String str, String split, int length) {
int len = str.length();
StringBuilder temp = new StringBuilder();
for (int i = 0; i < len; i++) {
if (i % length == 0 && i > 0) {
temp.append(split);
}
temp.append(str.charAt(i));
}
return temp.toString();
}

6. 获取window or linux机器码

 /**
* 获取window or linux机器码
* @return
*/
public static String getWindowNumber(String type){
if (Objects.isNull(type)){
return "";
}
Map<String,Object> codeMap=new HashMap<>(2);
String result = "";
if ("linux".equals(type)){
String boisVersion = getBoisVersion();
codeMap.put("boisVersion",boisVersion);
System.out.println("boisVersion:" + boisVersion);
String uuid = getUUID();
codeMap.put("uuid",uuid);
System.out.println("uuid:" + uuid);
String codeMapStr = JSON.toJSONString(codeMap);
String serials = MD5Util.saltingMD5(codeMapStr, SALT);
result= getSplitString(serials, "-", 4);
}else if ("window".equals(type)){
String processorId = getCPUSerialNumber();
codeMap.put("ProcessorId",processorId);
System.out.println("ProcessorId:" + processorId);
String serialNumber = getHardDiskSerialNumber();
codeMap.put("SerialNumber",serialNumber);
System.out.println("SerialNumber:" + serialNumber);
String codeMapStr = JSON.toJSONString(codeMap);
String serials = MD5Util.saltingMD5(codeMapStr, SALT);
result= getSplitString(serials, "-", 4);
}else { }
return result;
}

7.生成机器码

/**
* 机器码:A45DF6C62F6568B6E0039653EF7FF55F
* @param args
*/
public static void main(String[] args) throws IOException {
String windowNumber = getWindowNumber("window");
System.out.println("机器码:" + windowNumber);
}

java生成机器码的相关教程结束。

《java生成机器码.doc》

下载本文的Word格式文档,以方便收藏与打印。