IDUtil.java 1.77 KB
package com.sitech.util;

import java.math.BigInteger;
import java.security.SecureRandom;
import java.util.UUID;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author liujhc <liujhc at si-tech.com.cn>
 */
public class IDUtil {

    /**
     * 有序唯一的整数id(21位整数)
     *
     * @return
     */
    public static BigInteger generateOrderlyNumberId() {
        long mi = System.currentTimeMillis(), na = System.nanoTime() & ((1 << 20) - 1);
        BigInteger bi = BigInteger.valueOf(mi).shiftLeft(28).add(BigInteger.valueOf(na << 8));
        return bi.add(new BigInteger(8, new SecureRandom()));
    }

    /**
     * 有序唯一的字符串id(12位字符串)
     *
     * @return
     */
    public static String generateOrderlyId() {
        return Base62Util.encode(generateOrderlyNumberId());
    }

    /**
     * 经过编码处理的uuid(只包含数字和字母的22位字符串)
     *
     * @return
     */
    public static String randomEncodedUUID() {
        return Base62Util.encodeUUID(UUID.randomUUID());
    }
    
    /**
     * 通过字符串摘要生成经过编码处理的uuid(只包含数字和字母的22位字符串)
     *
     * @return
     */
    public static String nameEncodedUUID(String name) {
        return Base62Util.encodeUUID(UUID.nameUUIDFromBytes(name.getBytes()));
    }

    public static void main(String[] args) throws Exception {
    	System.out.println("md5:"+ IDUtil.nameEncodedUUID("eeee 2011-10-11vvvvvvvvvvv"));
		System.out.println("md5:" + IDUtil.nameEncodedUUID("eeee bbbb"));
		System.out.println("md5:"+ IDUtil.nameEncodedUUID("eeee 2011-10-11vvvvvvvvvvv"));
    }
}