根据日期和随机数生成32位的16进制随机数

package test.demo;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class TestDemo {
	public static void main(String[] args) {

		String id = createUUID();
		System.out.println(id);

	}

	/**
	 * 生成UUID
	 * @return String UUID
	 */
	@SuppressWarnings("deprecation")
	private static String createUUID() {
		// 生成1~16的UUID
		Date dg = new Date(1582, 10, 15, 0, 0, 0);
		Date dc = new Date();
		long t = dg.getTime() - dc.getTime();
		String tl = getIntegerBits(t, 0, 31);
		String tm = getIntegerBits(t, 32, 47);
		String thv = getIntegerBits(t, 48, 59) + '1';

		// 生成17~20的UUID
		String csar = getIntegerBits(rand(4095), 0, 7);
		String csl = getIntegerBits(rand(4095), 0, 7);
				
		// 生成21~32的UUID
		String n = getIntegerBits(rand(8191), 0, 7) +
				getIntegerBits(rand(8191), 8, 15) +
				getIntegerBits(rand(8191), 0, 7) +
				getIntegerBits(rand(8191), 8, 15) +
				getIntegerBits(rand(8191), 0, 15);

		// 生成UUID
		String uuid = tl + "-" + tm + "-" + thv + "-" + csar + csl + "-" + n;
		return uuid;
	}

	/**
	 * 作成指定长度的字符串
	 * 
	 * @param val 字符串
	 * @param start 起始索引
	 * @param end  结束索引
	 * @returns String 指定サイズの文字列
	 */
	private static String getIntegerBits(long val, int start, int end) {
		
		// 把文字列转换成16进制
		String base16 = asHex(val, 16);
		
		List<String> list = new ArrayList<String>(32);
		// 初始化返回值
		String quadString = "";
		
		// 把16进制的文字列依次放入List中
		for (int i = 0; i < base16.length(); i++) {
			list.add(base16.substring(i,i+1));
		}
		
		// 生成指定位数的文字列
		for (int i = (int) Math.floor(start / 4); i <= Math.floor(end / 4); i++) {
			try {
				if (list.get(i) == null || list.get(i) == "") {
					quadString += '0';
				} else {
					quadString += list.get(i);
				}
			} catch (IndexOutOfBoundsException e) {
				quadString += '0';
			}
		}
		// 返回指定位数的文字列
		return quadString;
	};

	/**
	 * 16进制转换(Long)
	 * 
	 */
	private static String asHex(long fieldNo, int base) {
		
		return Long.toString(fieldNo, base).toUpperCase();
	}

	/**
	 * 生成随机数
	 * @param max 随机数的上限值
	 * @return String 生成的随机数
	 */
	private static long rand(int max) {
		// 生成随机数并返回
		return (long)Math.floor(Math.random() * (max + 1));
	};
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值