(Java)制作随机生成验证码、噪点和干扰线

验证码效果如下
在这里插入图片描述
一、首先创建一个类CaptcheController并继承HttpServlet

package cn.edu.mju.project1.controller;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

@WebServlet("/captche")
public class CaptcheController extends HttpServlet {
    private final int width = 200;
    private final int height = 100;
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        BufferedImage img=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
        Graphics g = img.getGraphics();
        Font font= new Font("Algerian", Font.ITALIC, 40);//字体设置
        g.setFont(font);
        g.setColor(Color.WHITE);
        g.fillRect(0,0,width,height);
        g.setColor(Color.RED);
        String code =randString(4);
        g.drawString(code,40,65);

        g.setColor(Color.blue);
        for (int i = 0; i < 15; i++) {//生成干扰线
            Random random = new Random();
            int x = random.nextInt(width);
            int y = random.nextInt(height);
            int xl = random.nextInt(width);
            int y1 = random.nextInt(height);
            g.drawLine(x,y,xl,y1);
         }

        g.setColor(Color.black);
        for(int i = 0;i<500;i++) {//生成噪点
            Random ran = new Random();
            int x = ran.nextInt(width);
            int y = ran.nextInt(width);
            g.drawOval(x, y, 1, 1);
        }
        

        g.dispose();

        ServletOutputStream out = resp.getOutputStream();
        ImageIO.write(img,"jpg",out);
        try{
            out.flush();
        }finally {
            out.close();
        }
    }
    public String randString(int count){
        StringBuilder builder=new StringBuilder();
        String str="abcdefghijklmpqrstuvwxy0123456789";
        Random rnd = new Random();
        for (int i=0;i<count;i++){//随机生成验证码
        int pos = rnd.nextInt(str.length());
        String s = str.substring(pos,pos+1);
        builder.append(s);

        }
        return builder.toString();
    }
}

二、创建测试类TextCaptche

import cn.edu.mju.project1.controller.CaptcheController;
import org.junit.Test;

public class TextCaptche {
    @Test
    public void testRandomString(){
        CaptcheController c =new CaptcheController();
        System.out.println(c.randString(4));
    }
}

三、运行该测试类
在这里插入图片描述
四、运行整个项目,打开浏览器输入localhost:8081/captche
最后效果如下:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值