(个人笔记)生成验证码

来源:互联网 发布:无线网络管理工具 mac 编辑:程序博客网 时间:2024/06/06 09:37
public class getImg extends HttpServlet {//处理postpublic void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException {doGet(request,response);}public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException {HttpSession session=request.getSession(true);response.setContentType("image/gif");ServletOutputStream out1=response.getOutputStream();//在内存中创建图象int width=60, height=20;BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//获取图形上下文Graphics g = image.getGraphics();//生成随机类Random random = new Random();// 设定背景色//g.setColor(getRandColor(200,250));g.fillRect(0, 0, width, height);//设定字体g.setFont(new Font("Monotype Corsiva",Font.BOLD,18));//画边框g.setColor(Color.BLACK);g.drawRect(0,0,width-1,height-1);// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到//g.setColor(getRandColor(160,200));//for (int i=0;i<155;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);//}// 取随机产生的认证码(4位数字)String sRand="";for (int i=0;i<4;i++){    String rand=String.valueOf(random.nextInt(10));    sRand+=rand;    // 将认证码显示到图象中    g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成    if(i%2==0){    g.drawString(rand,13*i+6,16+2);    }else{    g.drawString(rand,13*i+6,16-2);    }}session.setAttribute("validateCode",sRand);//对session赋值JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out1);encoder.encode(image);out1.close();}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);        }}


<img src="<%=request.getContextPath()%>/getImg" >
	
				
		
原创粉丝点击