Java实现登录界面的验证码总结

java实现验证码的步骤:

1.创建验证码的实体类,代码如下:

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

import javax.imageio.ImageIO;



public class VerifyCode {
	/**
	 *楠岃瘉鐮�
	 * @author 瑕冧匠鍗�
	 */
	
	private int w = 50;
	private int h = 25;
	private Random r = new Random();
	private String[] fontNames = {"瀹嬩綋","鍗庢枃妤蜂綋","榛戜綋","寰蒋闆呴粦","妤蜂綋_GB2312"};
	private String codes = "23456789abcdefghjkmnpqrstuvwxyzABCEFGHIJKLMNPQRSTUVWXYZ";
	private Color bgColor = new Color(255,255,255);
	private String text;
	
	private Color randomColor(){
		int red = r.nextInt(200);
		int green = r.nextInt(200);
		int blue = r.nextInt(200);
		return new Color(red,green,blue);
	}
	
	private Font randomFont(){
		int index = r.nextInt(fontNames.length);
		String fontName = fontNames[index];
		int style = r.nextInt(4);
		int size = r.nextInt(6)+15;
		return new Font(fontName,style,size);
		}
	private void drawLine(BufferedImage image){
		int num = 3;
		Graphics2D g2 = (Graphics2D)image.getGraphics();
		for(int i=0;i<num;i++){
			int x1 = r.nextInt();
			int y1 = r.nextInt();
			int x2 = r.nextInt();
			int y2 = r.nextInt();
			g2.setStroke(new BasicStroke(1.5F));
			g2.setColor(Color.BLUE);
			g2.drawLine(x1,y1,x2,y2);
		}
	}
	private char randomChar(){
		int index = r.nextInt(codes.length());
		return codes.charAt(index);
	}
	private BufferedImage createImage(){
		BufferedImage image = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
		Graphics2D g2 = (Graphics2D)image.getGraphics();
		g2.setColor(this.bgColor);
		g2.fillRect(0, 0, w, h);
		return image;
	}
	public BufferedImage getImage(){
		BufferedImage image = createImage();
		Graphics2D g2 = (Graphics2D)image.getGraphics();
		StringBuilder sb = new StringBuilder();
		for(int i= 0;i<4;i++){
			String s = randomChar()+"";
			sb.append(s);
			float x = i*1.0F*w/4;
			g2.setFont(randomFont());
			g2.setColor(randomColor());
			g2.drawString(s, x, h-5);
		}
		this.text = sb.toString();
		drawLine(image);
		return image;
	}
	public String getText(){
	return text;
	}
	public static void output (BufferedImage image,OutputStream out) throws IOException{
		ImageIO.write(image, "JPEG", out);
	}
}
	
2.创建验证码的servlet

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.PrintWriter;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import util.VerifyCode;

@WebServlet("/VerifyCodeServlet")
public class VerifyCodeServlet extends HttpServlet {

	/**
	 * 锟斤拷桑锟斤拷锟斤拷锟斤拷锟街わ拷锟斤拷Servlet
	 * @author weiqiang
	 */
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		VerifyCode vc = new VerifyCode();
		response.setHeader("Cache-Control", "no-cache");
	    response.setContentType("image/jpeg");
	    BufferedImage bim = vc.getImage();
	    ImageIO.write(bim, "JPEG", response.getOutputStream());
	    String verifycode = vc.getText();
	    request.getSession().setAttribute("verifyCode", verifycode);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
			doGet(request, response);
	}
	public void destroy(){
		super.destroy();
	}
	public void init() throws ServletException{	
	}

}

3.在需要使用验证码的地方使用如下代码:

<!--这是看不清刷新一下的函数-->
<script>
function changeVerifyCode(){
	document.getElementById("validateCodeImg").src="VerifyCodeServlet?t="+Math.random();
	
}
</script>
<!-- 这是输入验证码的输入框-->
<INPUT id=txtSN size=4 name=txtSN>
<!-- 这是显示的验证码,以图片显示-->
<!-- src的路劲为servlet的路劲 -->
                  <img src="<%=basePath%>VerifyCodeServlet" border=0 id="validateCodeImg" style="height: 25px; width: 57px"/><a href="#" οnclick="changeVerifyCode()">看不清?换一张</a></TD>

4.实际效果如下



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值