java验证码工具类

package cn.rx.oamp.util;

import java.awt.Color;   
import java.awt.Font;   
import java.awt.Graphics;   
import java.awt.image.BufferedImage;   
import java.util.Random;   
  
import javax.imageio.ImageIO;   
import javax.servlet.ServletOutputStream;   
import javax.servlet.http.HttpServletRequest;   
import javax.servlet.http.HttpServletResponse;   
  
public final class ImageCode {   
  
    private static final Random random = new Random();   
  
    private static final Font[] CODEFONT = { new Font("宋体", Font.BOLD, 25), new Font("宋体", Font.BOLD, 25), new Font("宋体", Font.BOLD, 25),   
            new Font("宋体", Font.BOLD, 25) };   
    private static final Color[] FONTCOLOR = { Color.ORANGE, Color.RED, Color.PINK, Color.BLUE, Color.GREEN };   
    private static final Color[] BGCOLOR = { Color.WHITE, Color.GREEN };   
    private static final Color LINECOLOR = new Color(242, 234, 15);   
    private static final String[] CODE = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",   
            "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };   
    private static StringBuffer CONDENUMBER = null;   
    private static final int WIDTH = 100, HEIGHT = 25;   
  
    public final String image(HttpServletRequest request, HttpServletResponse response) {   
        CONDENUMBER = new StringBuffer();   
        BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);   
        Graphics g = image.getGraphics();   
        g.setColor(BGCOLOR[random.nextInt(1)]);   
        g.fillRect(0, 0, WIDTH, HEIGHT);   
        for (int i = 0; i < 4; i++) {   
            drawCode(g, i);   
        }   
        drawNoise(g, 8);   
        g.setColor(Color.gray);   
        g.drawRect(0, 0, WIDTH - 1, HEIGHT - 1);   
        g.dispose();   
        response.setHeader("Pragma", "No-cache");   
        response.setHeader("Cache-Control", "no-cache");   
        response.setDateHeader("Expires", 0);   
        response.setContentType("image/png");   
        ServletOutputStream sos = null;   
        try {   
            sos = response.getOutputStream();   
            ImageIO.write(image, "png", sos);   
            sos.flush();   
            sos.close();   
        } catch (Exception e) {   
            e.printStackTrace();   
            return null;   
        }   
        return CONDENUMBER.toString();   
    }   
  
    private final void drawCode(Graphics graphics, int i) {   
        String number = CODE[random.nextInt(36)];   
        graphics.setFont(CODEFONT[random.nextInt(4)]);   
        graphics.setColor(FONTCOLOR[random.nextInt(5)]);   
        graphics.drawString(number, 10 + i * 20, 20);   
        CONDENUMBER.append(number);   
    }   
  
    private final void drawNoise(Graphics graphics, int lineNumber) {   
        graphics.setColor(LINECOLOR);   
        int pointX1, pointY1, pointX2, pointY2;   
        for (int i = 0; i < lineNumber; i++) {   
            pointX1 = 1 + (int) (Math.random() * WIDTH);   
            pointY1 = 1 + (int) (Math.random() * HEIGHT);   
            pointX2 = 1 + (int) (Math.random() * WIDTH);   
            pointY2 = 1 + (int) (Math.random() * HEIGHT);   
            graphics.drawLine(pointX1, pointY1, pointX2, pointY2);   
        }   
    }   
  
} 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值