代码
package com.lpc.utils;
import java.util.Random;
/**
* 随机生成验证码工具类
*/
public class ValidateCodeUtils {
/**
* 随机生成验证码
* @param length 长度为4位或者6位
* @return
*/
public static Integer generateValidateCode(int length){
Integer code =null;
if(length == 4){
code = new Random().nextInt(9999);//生成随机数,最大为9999
if(code < 1000){
code = code + 1000;//保证随机数为4位数字
}
}else if(length == 6){
code = new Random().nextInt(999999);//生成随机数,最大为999999
if(code < 100000){
code = code + 100000;//保证随机数为6位数字
}
}else{
throw new RuntimeException("只能生成4位或6位数字验证码");
}
return code;
}
/**
* 随机生成指定长度字符串验证码
* @param length 长度
* @return
*/
public static String generateValidateCode4String(int length){
Random rdm = new Random();
String hash1 = Integer.toHexString(rdm.nextInt());
String capstr = hash1.substring(0, length);
return capstr;
}
}
测试
@Test
public void test2(){
// 测试生成4位数字验证码
Integer validateCode4Digits = ValidateCodeUtils.generateValidateCode(4);
System.out.println("生成4位数字验证码:" + validateCode4Digits);
// 测试生成6位数字验证码
Integer validateCode6Digits = ValidateCodeUtils.generateValidateCode(6);
System.out.println("生成6位数字验证码:" + validateCode6Digits);
// 测试生成6位字符串验证码
String validateCode6String = ValidateCodeUtils.generateValidateCode4String(6);
System.out.println("生成6位字符串验证码:" + validateCode6String);
}
优化代码1.0
package com.lpc.utils;
import java.util.concurrent.ThreadLocalRandom;
/**
* 随机生成验证码工具类
*/
public class ValidateCodeUtils {
private static final int MIN_LENGTH = 4;
private static final int MAX_LENGTH = 6;
private static final int MIN_NUMBER = 1000;
private static final int MAX_NUMBER = 999999;
/**
* 随机生成验证码
*
* @param length 长度,取值范围为4或6
* @return 生成的验证码,如果 length 不合法则返回 null
*/
public static Integer generateValidateCode(int length) {
if (length != MIN_LENGTH && length != MAX_LENGTH) {
throw new IllegalArgumentException("Length should be either 4 or 6.");
}
int randomNum = ThreadLocalRandom.current().nextInt(length == MIN_LENGTH ? MIN_NUMBER : 0, MAX_NUMBER);
String code = String.format("%0" + MAX_LENGTH + "d", randomNum);
return Integer.parseInt(code.substring(0, length));
}
/**
* 随机生成指定长度字符串验证码
*
* @param length 长度
* @return 生成的字符串验证码
*/
public static String generateValidateCode4String(int length) {
ThreadLocalRandom rdm = ThreadLocalRandom.current();
return Long.toString(rdm.nextLong(), 36).substring(0, length).toUpperCase();
}
}