java获取机器码简单实现demo
更新时间:2023年11月21日 10:45:44 作者:初窥门径
这篇文章主要为大家介绍了java获取机器码的简单实现demo,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
java获取机器码
import cn.hutool.crypto.digest.DigestUtil;
import com.alibaba.fastjson.JSON;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Scanner;
/**
* @author shanjunpeng
* @date 2023/9/27
*/
public class MachineCodeUtils {
public static final String WINDOWS = "Windows";
public static final String LINUX = "Linux";
/**
* 获取机器码
*/
public static String getMachineCode() {
return getMachineCode(getOS());
}
/**
* 获取操作系统
* @return
*/
public static String getOS() {
String os = System.getProperty("os.name").toLowerCase();
if (os.contains("win")) {
return WINDOWS;
} else if (os.contains("nix") || os.contains("nux") || os.contains("aix")) {
return LINUX;
} else if (os.contains("mac")) {
return "Mac OS";
} else if (os.contains("sunos")) {
return "Solaris";
} else {
return "Unknown";
}
}
public static String getMachineCode(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);
} else if (WINDOWS.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);
}else{
return "";
}
String codeMapStr = JSON.toJSONString(codeMap);
String serials = DigestUtil.md5Hex(codeMapStr);
result = getSplitString(serials, "-", 4);
return result.toUpperCase();
}
public static String getSplitString(String str, String joiner, int number) {
StringBuilder sb = new StringBuilder();
int len = str.length();
for (int i = 0; i < len; i += number) {
if (i + number <= len) {
sb.append(str, i, i + number);
} else {
sb.append(str.substring(i));
}
if (i + number < len) {
sb.append(joiner);
}
}
return sb.toString();
}
/**
* 获取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;
}
/**
* 获取 硬盘序列号(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("获取硬盘序列号失败");
}
}
/**
* 获取系统序列号(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;
}
/**
* 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;
}
}以上就是java获取机器码实现demo的详细内容,更多关于java获取机器码的资料请关注脚本之家其它相关文章!
相关文章
一文详解如何在idea中快速搭建一个Spring Boot项目
IntelliJ IDEA作为Java开发者的首选IDE,深度集成Spring Boot支持,可一键生成项目骨架、智能配置依赖,这篇文章主要介绍了如何在idea中快速搭建一个Spring Boot项目的相关资料,需要的朋友可以参考下2025-06-06
解决Process.getInputStream()阻塞的问题
这篇文章主要介绍了解决Process.getInputStream()阻塞的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-06-06
SpringBoot中dubbo+zookeeper实现分布式开发的应用详解
这篇文章主要介绍了SpringBoot中dubbo+zookeeper实现分布式开发的应用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-11-11
mybatis 使用jdbc.properties文件设置不起作用的解决方法
这篇文章主要介绍了mybatis 使用jdbc.properties文件设置不起作用的解决方法,需要的朋友可以参考下2018-03-03
Maven项目中出现“非法字符: 65279”错误的解决办法
在使用Maven进行项目构建时,有时会遇到一些意想不到的问题,其中一个常见的问题是遇到非法字符 65279,这个字符通常被称为零宽度无断行空格(Zero-width no-break space),本文将详细介绍如何识别和解决这个问题,需要的朋友可以参考下2025-12-12


最新评论