实现方式
package com.github.houbb.heaven.util.id.impl;
import com.github.houbb.heaven.annotation.ThreadSafe;
import com.github.houbb.heaven.util.id.Id;
import com.github.houbb.heaven.util.util.DateUtil;
import com.github.houbb.heaven.util.util.RandomUtil;
import java.util.Date;
/**
* 基于随机数生成的随机数字标识
*
* 组成方式:前缀+15位时间戳+后续随机数字
*
* 重复概率:1 Mills 内重复的概率为 1/(10)^10
*
* 应用场景:平时生成随机的标识。
*
* 优点:便于阅读,生成方便。
* 缺点:重复的概率和后续随机的长度有关,有时候可能会过长。
*
* @author binbin.hou
* @since 0.1.12
* @see com.github.houbb.heaven.util.util.DateUtil#TIMESTAMP_FORMAT_15 15 位时间戳
*/
@ThreadSafe
public class RandomNumId implements Id {
@Override
public String genId() {
final int randomLength = 10;
final String timestamp = DateUtil.getDateFormat(new Date(), DateUtil.TIMESTAMP_FORMAT_15);
return timestamp+ RandomUtil.randomNumber(randomLength);
}
}
个人收获
概率
是否会碰撞,本身就是一件概率事件。