«

Java 生成图片验证码实战详解(附代码示例)

时间:2026-11-2 08:04     作者:emer     分类: 无


无论你是刚入门Java,还是想温故知新,关于生成图片验证码的这篇梳理都值得花几分钟读完。内容不长,但都是干货。

生成图片验证码到底解决了什么问题?

前两天帮同事排查一个 bug,最后定位到问题出在生成图片验证码上。类似的坑我见过不止一次,索性把生成图片验证码相关的经验整理成这篇文章,希望对你有帮助。

吃透生成图片验证码:核心概念梳理

  1. 生成图片验证码在循环中使用时要留意重复开销,能提到循环外的就提出来。
  2. 遇到生成图片验证码相关的问题,先看错误信息,大部分线索都藏在报错里。
  3. 上线前对生成图片验证码相关的功能做一轮完整测试,别只测正常流程。
  4. 生成图片验证码的命名和用法要保持团队内一致,否则后期维护成本会成倍增加。
  5. 使用生成图片验证码前先想清楚它解决的是什么问题,避免拿着锤子找钉子。

光说不练假把式,接下来用代码验证一下生成图片验证码的实际效果。

生成图片验证码实战代码

直接上代码,生成图片验证码:

public static String captcha(OutputStream out) throws Exception {
    int w = 120, h = 40;
    BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
    Graphics2D g = img.createGraphics();
    g.setColor(Color.WHITE);
    g.fillRect(0, 0, w, h);
    String chars = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789";  // 去掉易混淆字符
    StringBuilder code = new StringBuilder();
    Random r = new Random();
    for (int i = 0; i < 4; i++) {
        char c = chars.charAt(r.nextInt(chars.length()));
        code.append(c);
        g.setColor(new Color(r.nextInt(150), r.nextInt(150), r.nextInt(150)));
        g.drawString(String.valueOf(c), 20 + i * 25, 28);
    }
    g.dispose();
    ImageIO.write(img, "png", out);
    return code.toString();   // 存入 session 用于校验
}

新手常犯的错误

总结

Java的世界很大,生成图片验证码只是其中一站。但这一站走稳了,后面的路会顺很多。


遇见问题加 QQ23979811 协助处理

标签: 编程教程 Java