生成验证码

本文介绍了一个简单的验证码生成及验证流程,使用Java Servlet实现。通过随机数生成四位数字验证码,并将其写入图片,同时加入干扰线增加识别难度。验证部分则比对用户输入与服务器保存的验证码,确认其正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

生成验证码

package cn.itcast.web.session;

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
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;
import javax.servlet.http.HttpSession;

public class CheckCodeServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
		response.setHeader("expires","-1");
		response.setHeader("cache-control","no-cache");
		response.setHeader("pragma","no-cache");
		String token = Token.getNum();
		//将验证码绑定到域对象
		HttpSession session = request.getSession();
		session.setAttribute("checkCodeServer",token);
		BufferedImage image = new BufferedImage(50,25,BufferedImage.TYPE_INT_RGB);
		Graphics g = image.getGraphics();
		g.drawString(token,15,15);
		//加干扰线
		for(int i=0;i<10;i++){
			Random r = new Random();
			int x1 = r.nextInt(50);
			int y1 = r.nextInt(25);
			g.drawLine(x1, y1, x1+4,y1+4);
		}
		ImageIO.write(image,"JPG",response.getOutputStream());
	}
}
class Token{
	public static String getNum(){
		Random r = new Random();
		int num = r.nextInt(10000);
		return num + "";
	}
}






判断验证码


public class LoginServlet extends HttpServlet {
	public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
		//收集客户端填入的验证码
		String checkCodeClient = request.getParameter("checkCodeClient");
		//取得服务端填入的验证码
		String checkCodeServer = (String) request.getSession().getAttribute("checkCodeServer");
		//判段
		response.setContentType("text/html;charset=UTF-8");
		if(checkCodeClient!=null && checkCodeClient.trim().length()>0 && checkCodeServer!=null && checkCodeServer.equals(checkCodeClient)){
			response.getWriter().write("验证码正确");
		}else{
			response.getWriter().write("验证码出错");
		}
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值