转载请标明出处:
公司需求:生成14位时间+redis流水3位+"-"+4位字母数字随机+"-"+9位字母数字随机
把14位时间、redis流水号、字母数字随机数各写成一个方法,方便后期还有此类需求可以根据需求调用对应的方法获取数据进行拼接即可,灵活运用。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.support.atomic.RedisAtomicLong;
import java.text.DecimalFormat;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
@Autowired
private RedisTemplate redisTemplate;
/**
* 获取14位时间方法
* @return 例:20221206153030
* @Author fu
* @Date 10:40 2022/12/6
*/
private String getDateStr() {
Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
return formatter.format(date);
}
/**
* 获取redis流水3位
* @return 例:001
* @Author fu
* @Date 10:40 2022/12/6
*/
public String incr() {
//serial_number为redis键
RedisAtomicLong entityIdCounter = new RedisAtomicLong("serial_number", redisTemplate.getConnectionFactory());
Long increment = entityIdCounter.getAndIncrement();
//STR_FORMAT 代表使用redis生成的流水位数,000代表三位数,当流水号大于999时自动从0开始
final String STR_FORMAT = "000";
if (increment == 0) {
increment = increment + 1;
} else if (increment > 999){
increment = 0L;
}
//位数不够,前面补0
DecimalFormat df = new DecimalFormat(STR_FORMAT);
return df.format(increment);
}
/**
* 获取指定长度的随机字母+数字
* @return 例:89AB、05PQRS895
* @Author fu
* @Date 10:40 2022/12/6
*/
private String SYMBOLS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private Random RANDOM = new SecureRandom();
//传参数字,如想生成9位随机数传9即可
public String getRandomNumber(int length) {
//自己设置指定长度
char[] nonceChars = new char[length];
for (int index = 0; index < nonceChars.length; ++index) {
nonceChars[index] = SYMBOLS.charAt(RANDOM.nextInt(SYMBOLS.length()));
}
return new String(nonceChars);
}