获取18位唯一码的java代码

            项目需要,写了个简单程序,代码如下:

package com.util;

import java.text.SimpleDateFormat;
import java.util.Random;

/**
 * 处理随机数的工具类
 * @author ysmstoneman
 *
 */
public class UtilTool {
 
 /**
  *
  * <br>功能:<B>获取18位唯一码</B>
  * <br>思路: 用时间戳加上4位随机数生成
  * <OL>
  *   <LI>1、</LI>
  *   <LI>2、</LI>
  *   <LI>3、</LI>
  * </OL>
  * <br>相关性:
  * @return
  */
 public static String getRandomUUID() {
  //1、创建时间戳
  java.util.Date dateNow = new java.util.Date();
  SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
  String dateNowStr = dateFormat.format(dateNow);
  StringBuffer sb = new StringBuffer(dateNowStr);

  //2、创建随机对象
  Random rd = new Random();
  
  //3、产生4位随机数
  String n = "";
  int rdGet; //取得随机数

  do {
   rdGet = Math.abs(rd.nextInt()) % 10 + 48; //产生48到57的随机数(0-9的键位值)
   // rdGet=Math.abs(rd.nextInt())%26+97; //产生97到122的随机数(a-z的键位值)
   char num1 = (char) rdGet;
   String dd = Character.toString(num1);
   n += dd;
  } while (n.length() < 4);// 假如长度小于4
  sb.append(n);
  
  //4、返回唯一码
  return sb.toString();
 }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java中,可以使用JNA库来获取U盘的唯一ID唯一标识。以下是一个示例代码: ```java import com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.Pointer; public class USBUtil { public interface CLibrary extends Library { CLibrary INSTANCE = (CLibrary) Native.loadLibrary("c", CLibrary.class); int ioctl(int fd, long cmd, Pointer arg); } public static String getSerialNumber(String drive) { try { String serial = null; if (drive.contains(":")) drive = drive.substring(0, 2); File file = new File(drive); if (!file.exists()) return null; String diskLetter = file.getAbsolutePath(); if (!diskLetter.endsWith("\\")) diskLetter += "\\"; Kernel32.SYSTEM_DEVICE_INFORMATION.ByReference byRef = new Kernel32.SYSTEM_DEVICE_INFORMATION.ByReference(); Memory memory = new Memory(byRef.size()); memory.clear(); byRef.memory = memory; byRef.size = memory.size(); long result = Kernel32.INSTANCE.ZwQuerySystemInformation(SystemDeviceInformation, byRef.getPointer(), byRef.size, null); if (result != 0) throw new RuntimeException("ZwQuerySystemInformation failed. Error: " + result); Kernel32.SYSTEM_DEVICE_INFORMATION deviceInfo = new Kernel32.SYSTEM_DEVICE_INFORMATION(byRef.memory); int diskNumber = -1; for (int i = 0; i < deviceInfo.NumberOfDisks; i++) { Kernel32.SYSTEM_DEVICE_INFORMATION.SYSTEM_DEVICE device = deviceInfo.getDisk(i); if (diskLetter.equals(device.SymbolicLinkName)) { diskNumber = device.DeviceNumber; break; } } if (diskNumber == -1) return null; String path = "\\\\.\\PhysicalDrive" + diskNumber; HANDLE hdev = Kernel32.INSTANCE.CreateFile(path, Kernel32.GENERIC_READ, Kernel32.FILE_SHARE_READ | Kernel32.FILE_SHARE_WRITE, null, Kernel32.OPEN_EXISTING, 0, null); if (hdev != WinBase.INVALID_HANDLE_VALUE) { STORAGE_PROPERTY_QUERY query = new STORAGE_PROPERTY_QUERY(); query.PropertyId = StorageDeviceProperty; query.QueryType = PropertyStandardQuery; int dwOutBufferSize = 1024; Memory outBuf = new Memory(dwOutBufferSize); boolean status = Kernel32.INSTANCE.DeviceIoControl(hdev, IOCTL_STORAGE_QUERY_PROPERTY, query.getPointer(), query.size(), outBuf, dwOutBufferSize, new IntByReference(), null); if (status) { STORAGE_DEVICE_DESCRIPTOR descriptor = new STORAGE_DEVICE_DESCRIPTOR(outBuf); serial = descriptor.getSerialNumber(); } Kernel32.INSTANCE.CloseHandle(hdev); } return serial; } catch (Exception ex) { ex.printStackTrace(); return null; } } public static final int FILE_DEVICE_DISK = 0x00000007; public static final int IOCTL_STORAGE_QUERY_PROPERTY = 0x2D1400; public static final int StorageDeviceProperty = 0; public static final int PropertyStandardQuery = 0; public static final int SystemDeviceInformation = 11; public static interface Kernel32 extends com.sun.jna.platform.win32.Kernel32 { public static Kernel32 INSTANCE = (Kernel32) Native.loadLibrary("kernel32", Kernel32.class); public HANDLE CreateFile(String lpFileName, int dwDesiredAccess, int dwShareMode, SECURITY_ATTRIBUTES lpSecurityAttributes, int dwCreationDisposition, int dwFlagsAndAttributes, HANDLE hTemplateFile); public boolean DeviceIoControl(HANDLE hDevice, int dwIoControlCode, Structure lpInBuffer, int nInBufferSize, Structure lpOutBuffer, int nOutBufferSize, IntByReference lpBytesReturned, Pointer lpOverlapped); public boolean CloseHandle(HANDLE hObject); public int ZwQuerySystemInformation(int SystemInformationClass, Pointer SystemInformation, int SystemInformationLength, IntByReference ReturnLength); public static class SYSTEM_DEVICE_INFORMATION extends Structure { public int NumberOfDisks; public static class SYSTEM_DEVICE extends Structure { public int DeviceType; public int DeviceNumber; public int PartitionNumber; public int AlignmentRequirement; public String SymbolicLinkName; public String DeviceName; } public SYSTEM_DEVICE_INFORMATION.SYSTEM_DEVICE getDisk(int index) { return (SYSTEM_DEVICE_INFORMATION.SYSTEM_DEVICE) this.fields[index]; } public SYSTEM_DEVICE_INFORMATION(Pointer memory) { super(memory); int offset = 0; this.NumberOfDisks = this.getInt(offset); offset += new NativeLong().size(); for (int i = 0; i < this.NumberOfDisks; i++) { SYSTEM_DEVICE_INFORMATION.SYSTEM_DEVICE device = new SYSTEM_DEVICE_INFORMATION.SYSTEM_DEVICE(); device.DeviceType = this.getInt(offset); offset += new NativeLong().size(); device.DeviceNumber = this.getInt(offset); offset += new NativeLong().size(); device.PartitionNumber = this.getInt(offset); offset += new NativeLong().size(); device.AlignmentRequirement = this.getInt(offset); offset += new NativeLong().size(); Pointer ptr = this.getPointer(offset); device.SymbolicLinkName = ptr.getString(0, true); offset += new Pointer(0).size(); ptr = this.getPointer(offset); device.DeviceName = ptr.getString(0, true); offset += new Pointer(0).size(); this.fields[i] = device; } } public SYSTEM_DEVICE_INFORMATION() { this(Structure.ALIGN_NONE); } public SYSTEM_DEVICE_INFORMATION(int alignment) { super(alignment); } public static class ByReference extends SYSTEM_DEVICE_INFORMATION implements Structure.ByReference { } } public static class STORAGE_PROPERTY_QUERY extends Structure { public int PropertyId; public int QueryType; public STORAGE_PROPERTY_QUERY() { } public STORAGE_PROPERTY_QUERY(int propertyId, int queryType) { this.PropertyId = propertyId; this.QueryType = queryType; } protected List getFieldOrder() { return Arrays.asList("PropertyId", "QueryType"); } } public static class STORAGE_DEVICE_DESCRIPTOR extends Structure { public int Version; public int Size; public byte DeviceType; public byte DeviceTypeModifier; public byte RemovableMedia; public byte CommandQueueing; public int VendorIdOffset; public int ProductIdOffset; public int ProductRevisionOffset; public int SerialNumberOffset; public STORAGE_DEVICE_DESCRIPTOR() { } public STORAGE_DEVICE_DESCRIPTOR(Pointer memory) { super(memory); this.read(); } public String getSerialNumber() { byte[] buffer = new byte[127]; this.getPointer().read(this.SerialNumberOffset, buffer, 0, buffer.length); return new String(buffer).trim(); } } } } ``` 使用方法: ```java String serialNumber = USBUtil.getSerialNumber("D:\\"); System.out.println(serialNumber); ``` 其中,参数"D:\\"表示U盘的驱动器号。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值