验证码的生成【JAVAweb】

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值