代码片段日常记录分享,直接上代码。
import java.security.SecureRandom;
/**
* 生成指定长度的随机数/随机字符工具(单例模式-双重检验锁)
*/
public class GenRandomUtil {
private static volatile GenRandomUtil instance = null;
private GenRandomUtil(){}
public static GenRandomUtil getInstance() {
if (instance == null) {
synchronized(GenRandomUtil.class) {
if (instance == null) {
instance = new GenRandomUtil();
}
}
}
return instance;
}
/**
* 字母
*/
private static final String RANDOM_CHAR = "char";
/**
* 数字
*/
private static final String RANDOM_NUM = "num";
/**
* 生成随机验证码
*
* @param length 长度
* @return 随机验证码(提货码)
*/
public String generatePickupCode(int length) {
StringBuilder code = new StringBuilder();
SecureRandom random = new SecureRandom();
// length为几位密码
for (int i = 0; i < length; i++) {
String charOrNum = random.nextInt(2) % 2 == 0 ? RANDOM_CHAR : RANDOM_NUM;
// 输出字母还是数字
if (RANDOM_CHAR.equalsIgnoreCase(charOrNum)) {
// 输出是大写字母还是小写字母
int temp = random.nextInt(2) % 2 == 0 ? 65 : 97;
code.append((char) (random.nextInt(26) + temp));
} else {
code.append(String.valueOf(random.nextInt(10)));
}
}
//应产品要求随机字母全小写
return code.toString().toLowerCase();
}
public static void main(String[] args) {
System.out.println(GenRandomUtil.getInstance().generatePickupCode(10));
}
}