关于生成唯一性ID算法(数据存储)
基于JDK1.8版本
/**
* @项目名称:bookreflect-utils
* @类名称:IdUtils
* @类描述:唯一标识工具类
* @作者:BookReflect @创建时间:2019/7/11 15:07
* @修改人: @修改时间:
* @备注:
*/
public class IdUtils {
private static final char[] BASE62 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".toCharArray();
public static void main(String[] args) {
System.out.println("uuid:"+uuid());
System.out.println("uuid2:"+uuid2());
System.out.println("randomLong:"+randomLong());
System.out.println("randomBase62:"+randomBase62(32));
}
private static SecureRandom random = new SecureRandom();
/**
* 封装JDK自带的UUID, 通过Random数字生成, 中间有-分割.
*/
public static String uuid() {
return UUID.randomUUID().toString();
}
/**
* 封装JDK自带的UUID, 通过Random数字生成, 中间无-分割.
*/
public static String uuid2() {
return UUID.randomUUID().toString().replaceAll("-", "");
}
/**
* 使用SecureRandom随机生成Long.
*/
public static long randomLong() {
return Math.abs(random.nextLong());
}
/**
* 基于Base62编码的SecureRandom随机生成bytes.
*/
public static String randomBase62(int length) {
byte[] randomBytes = new byte[length];
random.nextBytes(randomBytes);
return encodeBase62(randomBytes);
}
/**
* Base62编码。
*/
public static String encodeBase62(byte[] input) {
char[] chars = new char[input.length];
for (int i = 0; i < input.length; i++) {
chars[i] = BASE62[((input[i] & 0xFF) % BASE62.length)];
}
return new String(chars);
}
}
结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019071115183085.jpg)