需求:制作登录验证码图片
1.导入pom文件
<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.14</version>
</dependency>
<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.14</version> </dependency>
2.逻辑代码-->LineCaptcha为线状干扰样式,其他样式参照 https://hutool.cn/
public void getCode(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
LineCaptcha captcha = CaptchaUtil.createLineCaptcha(200, 45, 4, 4); captcha.setGenerator(new MyMathGebnerator(1)); captcha.createCode(); captcha.write(httpServletResponse.getOutputStream()); System.out.println("生成的验证码:" + captcha.getCode()); MyMathGebnerator mathGenerator = new MyMathGebnerator(); int calculateResult = (int) Calculator.conversion(captcha.getCode()); System.out.println("验证码的答案是:" + calculateResult); boolean bl = mathGenerator.verify(captcha.getCode(), null); System.out.println("验证码输入的是否正确:" + bl); //将验证码结果存入session做内部通讯 HttpSession session = httpServletRequest.getSession(); session.setAttribute("captchaNo", calculateResult);
}
public class MyMathGebnerator implements CodeGenerator { private static final long serialVersionUID = -5514819971774091076L; private static final String operators = "+-"; private final int numberLength; public MyMathGebnerator() { this(2); } public MyMathGebnerator(int numberLength) { this.numberLength = numberLength; } public String generate() { int limit = this.getLimit(); int number01 = RandomUtil.randomInt(limit); int number02 = RandomUtil.randomInt(limit); String number1 = ""; String number2 = ""; if (number01 < number02){ number1 = Integer.toString(number02); number2 = Integer.toString(number01); }else{ number1 = Integer.toString(number01); number2 = Integer.toString(number02); } number1 = StrUtil.padAfter(number1, this.numberLength, ' '); number2 = StrUtil.padAfter(number2, this.numberLength, ' '); return StrUtil.builder().append(number1).append(RandomUtil.randomChar("+-")).append(number2).append('=').toString(); } public boolean verify(String code, String userInputCode) { int result; try { result = Integer.parseInt(userInputCode); } catch (NumberFormatException var5) { return false; } int calculateResult = (int) Calculator.conversion(code); return result == calculateResult; } public int getLength() { return this.numberLength * 2 + 2; } private int getLimit() { return Integer.parseInt("1" + StrUtil.repeat('0', this.numberLength));} }
3.效果图