`
mingtian525
  • 浏览: 4058 次
  • 性别: Icon_minigender_1
  • 来自: 菏泽
社区版块
存档分类
最新评论

自己学着做的验证码

阅读更多
现在学习struts2,根据网上的资料通过struts2来做了一个验证码,资料都是很久的了,自己学习逻辑和思维方式。
有人推荐kaptcha插件制作验证码,没有尝试过呢,听说很强大,下一步试一试,现在贴出我自己的代码。
html页面:
  <div id="jpeg" >
  <span>这个是我自己做的验证码:</span>
  <img src="myimage.action" alt="验证码" style="border: 1px;"/>
  </div>
struts2 Action:
package com.sanqing.action;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.OutputStream;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class MyImage extends ActionSupport {

public String execute() throws Exception {
HttpServletResponse httpServletResponse = ServletActionContext.getResponse();
httpServletResponse.setContentType("image/jpeg");
//设置页面不缓存
httpServletResponse.setHeader("Pragma", "No-cache");
httpServletResponse.setHeader("Cache-Control", "no-cache");
httpServletResponse.setDateHeader("Expires", 0);
//在内存中创建图像,就像一个带画笔的画布
int width=60,height=20;
BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//获取图形上下文,就像获得画笔
Graphics2D g=image.createGraphics();
//设置画笔颜色,背景颜色浅点
g.setColor(getRandColor(200,250));
//在画布上画一个矩形,把整个画布都覆盖住
g.fillRect(0, 0, width, height);

//设定字体
g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
Random random=new Random();
for(int i=0;i<100;i++){//一百条干扰线
int sx=random.nextInt(width);
int sy=random.nextInt(height);
int ex=random.nextInt(10);
int ey=random.nextInt(10);
if(i%25==0){
g.setColor(getRandColor(150+i/5,220));
}
//画线
g.drawLine(sx, sy, ex, ey);
}
//获得验证码
StringBuffer ransb=new StringBuffer();
char[] ranChar="ABCDEFG23HGKLMN4567PQRST89UVWXYZ".toCharArray();
int len=ranChar.length;
Random rand=new Random();
for(int i=0;i<4;i++){
String temchar=String.valueOf(ranChar[rand.nextInt(len)]);
ransb.append(temchar);
g.setColor(getRandColor(30,250));
g.drawString(temchar, 13 * i + 6, 16);
}
// 图象生效
g.dispose();
OutputStream out=httpServletResponse.getOutputStream();
//jsp页面中可以这么写,就不会报IllegalStateException错误。
//ImageIO.write(image, "JPEG", response.getOutputStream());
// output.flush();
// out.clear();
// out = pageContext.pushBody();

/***
* 给定范围获得随机颜色
* @param fc 起始范围
* @param bc 结束范围
* @return 颜色对象
*/
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);
}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics