Java实现生成和校验图片验证码(详细) | 您所在的位置:网站首页 › 图形验证码是怎么输入的 › Java实现生成和校验图片验证码(详细) |
验证码校验是日常中很常见的场景,工作中难免会遇到了生成和校验验证码这样的需求,下面我们就来用java实现它 验证码生成和校验我用到了Hutool工具类,我们先引入他的依赖 cn.hutool hutool-captcha 5.8.6hutool生成图片验证码的核心接口是ICaptcha,此接口定义了以下方法: createCode 创建验证码,实现类需同时生成随机验证码字符串和验证码图片getCode 获取验证码的文字内容verify 验证验证码是否正确,建议忽略大小写write 将验证码写出到目标流中而AbstractCaptcha为一个ICaptcha抽象实现类,此类实现了验证码文本生成、非大小写敏感的验证、写出到流和文件等方法,通过继承此抽象类只需实现createImage方法定义图形生成规则即可。 一、生成随机验证码创建一个Demo,将验证码生成到本地 public static void main(String[] args) { // 定义图形验证码的长和宽 LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100); // 图形验证码写出到指定文件 lineCaptcha.write("F:/test/captcha.png"); }执行后可以在指定位置看到验证码图片了,非常简单 此外,我们还可以将验证码通过Servlet输出到浏览器 @GetMapping public void createCaptcha(HttpServletResponse response) throws IOException { // 定义图形验证码的长和宽 LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100); // 图形验证码写出,可以写出到文件,也可以写出到流 lineCaptcha.write(response.getOutputStream()); // 关闭流 response.getOutputStream().close(); }使用postman发送请求,可以看到验证码成功返回 CaptchaUtil还可以创建各种样式的验证码: 圆形干扰验证码: // 定义图形验证码的长、宽、验证码字符数、干扰元素个数 CircleCaptcha captcha = CaptchaUtil.createCircleCaptcha(200, 100, 4, 30);扭曲干扰验证码: // 定义图形验证码的长、宽、验证码字符数、干扰线宽度 ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(200, 100, 4, 4);GIF验证码: // 定义GIF验证码的长、宽 GifCaptcha captcha = CaptchaUtil.createGifCaptcha(200, 100); 二、校验验证码校验我们会用到ICaptcha的getCode()方法和verify(),生成图片验证码之后 public static void main(String[] args) { // 定义图形验证码的长和宽 LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100); // 图形验证码写出到文件 lineCaptcha.write("F:/test/captcha.png"); // getCode()可以获取到验证码的值 System.out.println(lineCaptcha.getCode()); // verify()验证图形验证码的有效性,返回boolean值 System.out.println(lineCaptcha.verify("ABCD")); System.out.println(lineCaptcha.verify(lineCaptcha.getCode())); }输出结果: 但是我一般不会用到verify()方法,我的逻辑是生成验证码的时候通过getCode()获取到他的code存入redis中,然后来校验 三、自定义格式验证码有时候普通的验证码不满足要求,比如我们希望使用纯数字、加减乘除的验证码,此时我们就可以自定义他的格式 纯数字的验证码: @GetMapping public void createCaptcha(HttpServletResponse response) throws IOException { // 随机4位数字,可重复 RandomGenerator randomGenerator = new RandomGenerator("0123456789", 4); LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100); lineCaptcha.setGenerator(randomGenerator); // 重新生成code lineCaptcha.createCode(); lineCaptcha.write(response.getOutputStream()); // 关闭流 response.getOutputStream().close(); }四则运算验证码: @GetMapping public void createCaptcha(HttpServletResponse response) throws IOException { LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100); // 自定义验证码内容为四则运算方式 lineCaptcha.setGenerator(new MathGenerator()); // 重新生成code lineCaptcha.createCode(); // 重新生成code lineCaptcha.createCode(); lineCaptcha.write(response.getOutputStream()); // 关闭流 response.getOutputStream().close(); }至此,生成验证码就演示完了,如果这篇文章帮助到你,那就点个赞吧~ |
CopyRight 2018-2019 实验室设备网 版权所有 |