当前位置:首页 > Java

如何开发java验证码

2026-03-18 23:37:40Java

生成随机验证码

使用Java的Random类或SecureRandom生成随机字符或数字组合。通常验证码包含数字、大小写字母,长度为4-6位。

import java.util.Random;

public class CaptchaGenerator {
    private static final String CHAR_LIST = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    private static final int LENGTH = 6;

    public static String generateCaptcha() {
        Random random = new Random();
        StringBuilder captcha = new StringBuilder();
        for (int i = 0; i < LENGTH; i++) {
            int index = random.nextInt(CHAR_LIST.length());
            captcha.append(CHAR_LIST.charAt(index));
        }
        return captcha.toString();
    }
}

生成图形验证码

使用Java的BufferedImage绘制验证码图片,添加干扰线、噪点等增强安全性。

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class CaptchaImageGenerator {
    public static byte[] generateImage(String captchaText) throws IOException {
        int width = 200, height = 50;
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics2D graphics = image.createGraphics();

        // 背景色
        graphics.setColor(Color.WHITE);
        graphics.fillRect(0, 0, width, height);

        // 验证码文字
        graphics.setColor(Color.BLACK);
        graphics.setFont(new Font("Arial", Font.BOLD, 30));
        graphics.drawString(captchaText, 50, 35);

        // 干扰线
        graphics.setColor(Color.GRAY);
        for (int i = 0; i < 5; i++) {
            int x1 = (int) (Math.random() * width);
            int y1 = (int) (Math.random() * height);
            int x2 = (int) (Math.random() * width);
            int y2 = (int) (Math.random() * height);
            graphics.drawLine(x1, y1, x2, y2);
        }

        ByteArrayOutputStream output = new ByteArrayOutputStream();
        ImageIO.write(image, "png", output);
        return output.toByteArray();
    }
}

验证码存储与校验

将生成的验证码存储在服务端(如Session或Redis),用户提交时进行比对。

import javax.servlet.http.HttpSession;

public class CaptchaValidator {
    public static boolean validate(String userInput, HttpSession session) {
        String storedCaptcha = (String) session.getAttribute("captcha");
        return userInput != null && userInput.equalsIgnoreCase(storedCaptcha);
    }
}

集成到Web应用

在Servlet或Spring Boot中返回验证码图片,并设置Session。

@RestController
public class CaptchaController {
    @GetMapping("/captcha")
    public ResponseEntity<byte[]> getCaptcha(HttpSession session) throws IOException {
        String captchaText = CaptchaGenerator.generateCaptcha();
        session.setAttribute("captcha", captchaText);
        byte[] imageBytes = CaptchaImageGenerator.generateImage(captchaText);
        return ResponseEntity.ok().contentType(MediaType.IMAGE_PNG).body(imageBytes);
    }
}

增强安全性措施

  • 限制验证码有效时间(如5分钟过期)。
  • 禁止同一验证码重复使用。
  • 添加滑动验证或行为验证(如Google reCAPTCHA)补充。

前端调用示例

HTML通过<img>标签加载验证码,表单提交时携带用户输入。

如何开发java验证码

<img src="/captcha" onclick="this.src='/captcha?t=' + Date.now()" />
<input type="text" name="captcha" placeholder="输入验证码" />

标签: 验证码java
分享给朋友:

相关文章

验证码实现vue

验证码实现vue

验证码实现(Vue) 在Vue中实现验证码功能通常需要结合前端生成和验证逻辑,以及可能的后端校验。以下是两种常见实现方式: 基于Canvas的图形验证码 通过Canvas动态生成包含随机字符的图形验…

如何使用java

如何使用java

安装Java开发环境 下载并安装Java Development Kit(JDK),推荐从Oracle官网或OpenJDK获取最新版本。安装完成后配置环境变量,确保JAVA_HOME指向JDK安装路径…

如何运行java程序

如何运行java程序

编写Java代码 创建一个以.java为扩展名的文件,例如HelloWorld.java。文件内容需包含一个类定义,类名必须与文件名一致。例如: public class HelloWorld {…

uniapp图形验证码

uniapp图形验证码

uniapp 图形验证码实现方法 在 uniapp 中实现图形验证码功能可以通过多种方式完成,以下是几种常见的实现方案: 使用第三方验证码服务 接入第三方验证码服务如极验、腾讯云验证码等,这些服务通…

java如何产生随机数

java如何产生随机数

使用 Math.random() 方法 Math.random() 生成一个范围在 [0.0, 1.0) 的伪随机 double 值。通过缩放和偏移可以生成指定范围的随机数。 double ra…

如何学习java语言

如何学习java语言

学习Java语言的系统方法 理解基础概念 Java是一种面向对象的编程语言,掌握基础概念如变量、数据类型、运算符、控制流语句(if-else、循环)是第一步。熟悉类和对象的概念,理解封装、继承和多态三…