Java生成算式验证码

@WebServlet("/captcha")
public class CaptchaServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private static final int WIDTH = 100; // 图片宽度
    private static final int HEIGHT = 30; // 图片高度
    private static final int FONT_SIZE = 20; // 字体大小
    private static final int MAX_NUMBER = 10; // 随机数的最大值
    private static final int MAX_OFFSET = 5; // 随机误差的最大值
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 生成随机算式
        Random random = new Random();
        int num1 = random.nextInt(MAX_NUMBER);
        int num2 = random.nextInt(MAX_NUMBER);
        char op = random.nextBoolean() ? '+' : '-';
        int result = op == '+' ? num1 + num2 : num1 - num2;
        String captcha = String.format("%d %c %d = ", num1, op, num2);
        // 将验证码和计算结果存储到 session 中
        HttpSession session = request.getSession();
        session.setAttribute("captcha", captcha);
        session.setAttribute("result", result);
        // 生成验证码图片
        BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
        Graphics2D g = image.createGraphics();
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, WIDTH, HEIGHT);
        g.setColor(Color.BLACK);
        g.setFont(new Font("Arial", Font.PLAIN, FONT_SIZE));
        g.drawString(captcha, MAX_OFFSET, HEIGHT / 2 + FONT_SIZE / 2 - MAX_OFFSET);
        // 将验证码图片写入输出流中
        response.setContentType("image/png");
        OutputStream out = response.getOutputStream();
        ImageIO.write(image, "png", out);
        out.close();
    }
}



        Result<String> res = new Result<String>();
        // 生成随机算数运算符
        final Random random = new Random();
        int operatorIndex = random.nextInt(3);
        char operator = '+';
        switch (operatorIndex) {
            case 0:
                operator = '+';
                break;
            case 1:
                operator = '-';
                break;
            case 2:
                operator = '×';
                break;
        }
        // 生成随机算数操作数
        int operand1 = random.nextInt(10) + 1;
        int operand2 = random.nextInt(10) + 1;
        if (operator == '-') {
            while (operand1 < operand2) {
                operand1 = random.nextInt(10) + 1;
                operand2 = random.nextInt(10) + 1;
            }
        }
        // 计算结果
        int result = 0;
        String lowerCaseCode = "";
        switch (operator) {
            case '+':
                result = operand1 + operand2;
                lowerCaseCode = operand1 + "+" + operand2 + "=";
                break;
            case '-':
                result = operand1 - operand2;
                lowerCaseCode = operand1 + "-" + operand2 + "=";
                break;
            case '×':
                result = operand1 * operand2;
                lowerCaseCode = operand1 + "*" + operand2 + "=";
                break;
        }

第一部分是一个名为 CaptchaServlet 的 Java Servlet,用于生成验证码图片。第二部分是一个生成算式验证码的方法,返回一个包含算式和结果的字符串,以及一个 Result 对象。

在 CaptchaServlet 中,首先生成一个随机算式,包含两个随机数和一个随机运算符,然后将验证码和计算结果存储到 HttpSession 中。接着生成一个验证码图片,使用 Graphics2D 绘制验证码字符串,最后将验证码图片写入 HttpServletResponse 的输出流中。

在生成算式验证码的方法中,首先生成一个随机运算符和两个随机操作数,如果运算符是减法,则要保证被减数大于减数。然后根据运算符计算结果,并将算式和结果存储到一个字符串中,返回给调用者。同时,还生成一个 Result 对象,用于存储算式验证码的字符串和计算结果。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值