zheng-yi

1. 写一个生成随机验证码的工具类

public class CodeImageUtil {
    private static final char[] chars = {
            \'0\', \'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\',
            \'a\', \'b\', \'c\', \'d\', \'e\', \'f\', \'g\', \'h\', \'i\', \'j\', \'k\', \'m\', \'n\',
            \'o\', \'p\', \'q\', \'r\', \'s\', \'t\', \'u\', \'v\', \'w\', \'x\', \'y\', \'z\',
            \'A\', \'B\', \'C\', \'D\', \'E\', \'F\', \'G\', \'H\', \'J\', \'K\', \'L\', \'M\', \'N\',
            \'O\', \'P\', \'Q\', \'R\', \'S\', \'T\', \'U\', \'V\', \'W\', \'X\', \'Y\', \'Z\'
    };
    // 字符数量
    private static final int SIZE = 4;
    // 干扰线数量
    private static final int LINES = 5;
    // 宽度
    private static final int WIDTH = 100;
    // 高度
    private static final int HEIGHT = 40;
    // 字体大小
    private static final int FONT_SIZE = 30;

    public static Object[] createImage(){
        StringBuffer sb = new StringBuffer();
        //创建空白图片
        BufferedImage image = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
        //获取图片画笔
        Graphics graphics = image.getGraphics();
        //设置画笔颜色
        graphics.setColor(new Color(0xEDEDED));
        //绘制矩形背景
        graphics.fillRect(0,0,WIDTH,HEIGHT);
        //画随机字符
        Random random = new Random();
        for (int i=0;i<SIZE;i++){
            //获取随机字符索引
            int j = random.nextInt(chars.length);
            //设置随机颜色
            graphics.setColor(getRandonColor());
            //设置字体大小
            graphics.setFont(new Font(null,Font.BOLD+Font.ITALIC,FONT_SIZE));
            //画字符
            graphics.drawString(chars[j] + "",i * (WIDTH)/SIZE + 1,HEIGHT*2/3);
            //记录字符
            sb.append(chars[j]);
        }
        //画干扰线
        for (int i = 0;i<LINES;i++){
            //设置随机颜色
            graphics.setColor(getRandonColor());
            //随机画线
            graphics.drawLine(random.nextInt(WIDTH),random.nextInt(HEIGHT),random.nextInt(WIDTH),random.nextInt(HEIGHT));
        }
        //返回验证码和图片
        return new Object[]{sb.toString(),image};
    }

    /**
     * 随机取色
     */
    private static Color getRandonColor() {
        Random random = new Random();
        Color color = new Color(random.nextInt(256),random.nextInt(256),random.nextInt(256));
        return color;
    }
}

2. 使用工具类,将图片和随机的验证码返回

public void getCode(HttpServletResponse response, HttpSession session) throws IOException {
  Object[] objs = CodeImageUtil.createImage();
        String code = (String) objs[0];
        BufferedImage image = (BufferedImage) objs[1];

        OutputStream os = response.getOutputStream();
        ImageIO.write(image,"png",os);
        System.out.println(code);
        session.setAttribute("Code",code);
}

分类:

技术点:

相关文章:

  • 2021-12-05
  • 2021-12-05
  • 2021-10-03
  • 2022-01-15
  • 2021-07-04
  • 2021-10-10
  • 2021-06-13
  • 2021-11-19
猜你喜欢
  • 2021-11-29
  • 2021-07-20
  • 2022-01-08
  • 2021-12-05
  • 2021-12-23
  • 2022-12-23
  • 2021-12-05
相关资源
相似解决方案