关闭

验证码的生成【JAVAweb】

153人阅读 评论(0) 收藏 举报
分类:

1,在一个servlet中生成一个验证码

package hpu.edu.servlet;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class PicCode extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		BufferedImage bi = new BufferedImage(60, 30, BufferedImage.TYPE_3BYTE_BGR);//拿到一个画板,长为80,宽为50,颜色显示类型为TYPE_3BYTE_BGR
		Graphics g = bi.getGraphics();//在画板上画一张纸
		
		Color color = new Color(224,205,19);//调色 采用RGB的调色方式,R显示红色,。。。取值范围为0~255
		//通过三原色的不同取值可以调出不同颜色, 另外Math.random()
		g.setColor(color);
		g.fillRect(0, 0,80, 30);//颜色填充
		char[] c = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();//设置验证码字符的取值
		Random random = new Random();//随机数字产生器
		StringBuffer sb = new StringBuffer(4);//可以理解为用于存放四个char字符的盒子
		for(int i=0;i<4; i++){
			char index = c[(int)(0+Math.random()*c.length)];//从串中随机取出一个字符
			Font font = new Font("幼圆",Font.BOLD, 25);//设置字符的字体
			Color clo = new Color(random.nextInt(255));
			g.setFont(font);
			g.setColor(clo);
			g.drawString(index+"", i*15, 22);//把字符画到纸上 后边两个参数为偏移量 可调
			//g.setColor(new Color(random.nextInt(150),random.nextInt(220), random.nextInt(180)));//设置字体颜色
			sb.append(index);//把随机生成的一个字符放到盒子里
			
		}//随机产生四个字符画到画板上 并设置相关属性
		
		for(int i=0;i<8;i++){
			g.drawLine(random.nextInt(80), random.nextInt(30), random.nextInt(80), random.nextInt(30));//画干扰线,两点确定一条直线
		}
		request.getSession().setAttribute("piccode", sb.toString());//把四个字符放到session里
		ImageIO.write(bi,"JPG", response.getOutputStream());//输出图片类型为JPG
	}
	
}
2,页面显示 

<pre name="code" class="html"><input type="text" name="checkcode">
<img alt="验证码" src="servlet/PicCode"><a href="">看不清</a>



3,判断正误

//检查验证码
		String checkcode =  request.getParameter("checkcode");
		String piccode= (String) request.getSession().getAttribute("piccode");
		
		if(!checkcode.equalsIgnoreCase(piccode)){
			response.sendRedirect("error.jsp");
		}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:108871次
    • 积分:4443
    • 等级:
    • 排名:第7035名
    • 原创:346篇
    • 转载:1篇
    • 译文:0篇
    • 评论:30条
    最新评论