private static final String[] NUMS = {"1", "2", "3", "4", "5", "6", "7",
"8", "9", "0"};
private static final String[] UPPERS = {"A", "B", "C", "D", "E", "F", "G",
"H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",
"U", "V", "W", "X", "Y", "Z"};
private static final String[] UPPERSNUM = {"1","A", "B","2", "C", "D","3", "E", "F", "G",
"7","H", "I", "5","J", "K", "L", "M", "4", "N", "O", "P", "Q","9", "R", "S", "T", "0",
"U", "8", "V", "W", "X","6", "Y", "Z"};

/**
* 生成指定长度随机字符串(必须包含大小写字母和数字)
*
* @param length 随机数长度
* @return 随机字符串
*/
public static String generateRandom(int length) {
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= length; i++) {
if (i == length) {
if (StringUtils.isAlpha(sb.toString())){
sb.append(getRandom("num"));
}else if (StringUtils.isNumeric(sb.toString())){
sb.append(getRandom("upper"));
}else {
sb.append(getRandom(""));
}
} else {
sb.append(getRandom(""));
}
}
return sb.toString();
}

/**
* 生成一个随机字符
*
* @param charOrNum 随机生成类型:upper大写字母,lower小写字母,num数字,否则三种类型随机生成
* @return 随机字符
*/
public static String getRandom(String charOrNum) {
Random random = new Random();
// 输出字母还是数字
if ("upper".equalsIgnoreCase(charOrNum)) {
// 大写字母
return UPPERS[random.nextInt(UPPERS.length)];
} else if ("num".equalsIgnoreCase(charOrNum)) {
// 数字
return NUMS[random.nextInt(NUMS.length)];
} else {
return UPPERSNUM[random.nextInt(UPPERSNUM.length)];
}
}