当前位置 : 主页 > 编程语言 > java >

java随机验证码

来源:互联网 收集:自由互联 发布时间:2021-06-28
java 验证码 public class RandomImage { //字符的位数 public final int STRING_LENGTH = 6; public String randStr = ""; public Color getRandColor(int fc, int bc) { //给定范围获得随机颜色 Random random = new Random(); if (fc 25
java 验证码
public class RandomImage {
    //字符的位数
    public final int STRING_LENGTH = 6;
    public String randStr = "";
    public Color getRandColor(int fc, int bc) { //给定范围获得随机颜色
        Random random = new Random();
        if (fc > 255) {
            fc = 255;
        }
        if (bc > 255) {
            bc = 255;
        }
        int r = fc + random.nextInt(bc - fc);
        int g = fc + random.nextInt(bc - fc);
        int b = fc + random.nextInt(bc - fc);
        return new Color(r, g, b);
    }

    public BufferedImage creatImage() {

        // 在内存中创建图象
        int width = 83, height = 20;
        BufferedImage image = new BufferedImage(width, height,
                                                BufferedImage.TYPE_INT_RGB);

        // 获取图形上下文
        Graphics g = image.getGraphics();
        //生成随机类
        Random random = new Random();
        // 设定背景色
        g.setColor(new Color(255,244,175));//(getRandColor(200, 250));
        g.fillRect(0, 0, width, height);

        //设定字体
        //      g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
        Font newFont = g.getFont();
        g.setFont(new Font(newFont.getName(), Font.PLAIN, 18));

      // 随机产生100条干扰线,使图象中的认证码不易被其它程序探测到
        g.setColor(getRandColor(160, 200));
        for (int i = 0; i < 100; i++) {
            int x = random.nextInt(width);
            int y = random.nextInt(height);
            int xl = random.nextInt(12);
            int yl = random.nextInt(12);
            g.drawLine(x, y, x + xl, y + yl);
        }
        //产生随机数,包含大小写字母和数字
        //修改此处可以支持数字,字母,或者字母数字组合
        randStr = RandomStringUtils.randomNumeric(this.STRING_LENGTH);
        for (int i = 0; i < this.STRING_LENGTH; i++) {
            String rand = String.valueOf(randStr.charAt(i));
        // 将认证码显示到图象中
            g.setColor(new Color(20 + random.nextInt(110),
                                 20 + random.nextInt(110),
                                 20 + random.nextInt(110)));
            g.drawString(rand, 13 * i + 6, 16);
        }
       // 图象生效
        g.dispose();
        return image;
    }
}










输出图片:
protected void action(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
		// TODO Auto-generated method stub
		RandomImage rImage=new RandomImage();
		HttpSession session=request.getSession();
        //图片格式
		response.setContentType("image/jpeg");
        //不缓存
		response.addHeader("pragma","NO-cache");
		response.addHeader("Cache-Control","no-cache");
		response.addDateHeader("Expries",0);
		//ImageIO.write(rImage.creatImage(), "JPEG", response.getOutputStream());
		JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(response.getOutputStream());
		encoder.encode(rImage.creatImage());
        //放进session
		session.setAttribute("rand",rImage.randStr);
上一篇:java打印堆栈
下一篇:支付宝支付逻辑块
网友评论