java 复杂验证码生成,java验证码生成种

java验证码生成类

package cn.edu.pdsu.action;

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;

import javax.servlet.http.HttpSession;

import org.apache.commons.lang.RandomStringUtils;

import org.apache.struts2.ServletActionContext;

/**

* 类说明:验证码类(将验证码信息写入到session中 属性“authCode”)

*

* @author 作者: LiuJunGuang

* @version 创建时间:2011-7-17 下午03:26:21

*/

public class AuthCodeAction {

private HttpServletResponse response = ServletActionContext.getResponse();

private HttpServletRequest request = ServletActionContext.getRequest();

public String execute() {

try {

int width = 50;

int height = 20;

// 取得一个4位随机字母数字字符串

String s = RandomStringUtils.random(4, true, true);

// 保存入session,用于与用户的输入进行比较.

// 注意比较完之后清除session.

HttpSession session = request.getSession(true);

session.setAttribute("authCode", s);

response.setContentType("images/jpeg");//告知浏览器内容的类型

response.setHeader("Pragma", "No-cache");//HTTP 1.0版 不要缓存

response.setHeader("Cache-Control", "no-cache"); //HTTP 1.1 不要缓存

response.setDateHeader("Expires", 0);//设置存活时间

ServletOutputStream out = response.getOutputStream();//得到响应输出流

BufferedImage image = new BufferedImage(width, height,

BufferedImage.TYPE_INT_RGB);

Graphics g = image.getGraphics();

// 设定背景色

g.setColor(getRandColor(200, 250));

g.fillRect(0, 0, width, height);

// 设定字体

Font mFont = new Font("Times New Roman", Font.BOLD, 18);// 设置字体

g.setFont(mFont);

// 画边框

// g.setColor(Color.BLACK);

// g.drawRect(0, 0, width - 1, height - 1);

// 随机产生干扰线,使图象中的认证码不易被其它程序探测到

g.setColor(getRandColor(160, 200));

// 生成随机类

Random random = new Random();

for (int i = 0; i < 125; i++) {

int x2 = random.nextInt(width);

int y2 = random.nextInt(height);

int x3 = random.nextInt(12);

int y3 = random.nextInt(12);

g.drawLine(x2, y2, x2 + x3, y2 + y3);

}

// 绘制一些长的干扰线

for (int i = 0; i < 5; i++) {

int y1 = random.nextInt(15) + 3;

g.drawLine(0, y1, width, y1);

g.setColor(getRandColor(10, 160));

}

// 将认证码显示到图象中

g.setColor(new Color(20 + random.nextInt(110), 20 + random

.nextInt(110), 20 + random.nextInt(110)));

g.drawString(s, 2, 16);

// 图象生效

g.dispose();

// 输出图象到页面

ImageIO.write((BufferedImage) image, "JPEG", out);//将图片以JPEG格式输出到out输出流中

out.close();

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

//获得某一范围的随机颜色

private 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);

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值