图形验证码
(一)图形验证码
验证码功能位于 cn.hutool.captcha 包中,核心接口为 ICaptcha,此接口定义了以下方法:
- createCode: 创建验证码,实现类需同时生成随机验证码字符串和验证码图片
- getCode: 获取验证码的文字内容
- verify: 验证验证码是否正确,建议忽略大小写
- write: 将验证码写出到目标流中
其中 write 方法只有一个 OutputStream,ICaptcha 实现类可以根据这个方法封装写出到文件等方法。
AbstractCaptcha 为一个 ICaptcha 抽象实现类,此类实现了验证码文本生成、非大小写敏感的验证、写出到流和文件等方法,通过继承此抽象类只需实现 createImage 方法定义图形生成规则即可。
(二)实现类
1.LineCaptcha 线段干扰的验证码
生成效果大致如下:
代码
//定义图形验证码的长和宽 LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100); //图形验证码写出,可以写出到文件,也可以写出到流 lineCaptcha.write("d:/line.png"); //输出code Console.log(lineCaptcha.getCode()); //验证图形验证码的有效性,返回boolean值 lineCaptcha.verify("1234"); //重新生成验证码 lineCaptcha.createCode(); lineCaptcha.write("d:/line.png"); //新的验证码 Console.log(lineCaptcha.getCode()); //验证图形验证码的有效性,返回boolean值 lineCaptcha.verify("1234");
2.CircleCaptcha 圆圈干扰验证码
CircleCaptcha captcha = CaptchaUtil.createCircleCaptcha(200, 100, 4, 20); //CircleCaptcha captcha = new CircleCaptcha(200, 100, 4, 20); //图形验证码写出,可以写出到文件,也可以写出到流 captcha.write("d:/circle.png"); //验证图形验证码的有效性,返回boolean值 captcha.verify("1234");
3.ShearCaptcha 扭曲干扰验证码
//定义图形验证码的长、宽、验证码字符数、干扰线宽度 ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(200, 100, 4, 4); //ShearCaptcha captcha = new ShearCaptcha(200, 100, 4, 4); //图形验证码写出,可以写出到文件,也可以写出到流 captcha.write("d:/shear.png"); //验证图形验证码的有效性,返回boolean值 captcha.verify("1234");
写出到浏览器(Servlet输出)
ICaptcha captcha = ...; captcha.write(response.getOutputStream()); //Servlet的OutputStream记得自行关闭哦!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了