Java生成验证码需用Random生成4–6位安全字符(如"23456789ABCDEFGHJKMNPQRSTUVWXYZ"),存入session或Redis;再用BufferedImage和Graphics2D绘制带干扰线、噪点的图片,最后通过Servlet输出PNG响应。
用Java生成验证码,核心是结合随机数生成字符 + BufferedImage 绘制图像。不需要第三方库,JDK 自带的 java.awt 和 java.util.Random 就足够了。
验证码通常为4–6位字母+数字组合,需避免易混淆字符(如 0/O、1/l/I)。
"23456789ABCDEFGHJKMNPQRSTUVWXYZ"(去掉 0、1、O、l、I)Random 随机取4次字符,拼成字符串创建内存图像,用 Graphics2D 在上面画字、干扰线、噪点。
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
g.setColor(Color.LIGHT_GRAY); g.fillRect(0, 0, width, height);
g.drawLine(...))和少量噪点(g.drawOval(x, y, 1, 1))在 Servlet 或 Spring Boot Controller 中,把 BufferedImage 写入 response 输出流。
response.setContentType("image/png");
ServletOutputStream out = response.getOutp
utStream();
ImageIO.write(image, "png", out); 输出out.flush() 和 out.close()
验证码不只是“画出来”,关键在前后端协同验证。
/captcha?ts=123,加时间戳防缓存)