用户登入验证码代码示例

50 篇文章 0 订阅
48 篇文章 3 订阅

第一中验证码:

一.验证码实现代码 

   通过BufferedImage类进行绘制:

package com.igeek.web;

import java.awt.Color;
import java.awt.Font;
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.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 验证码的Servlet
 */
@WebServlet("/verification.jpg")
public class VerificationCodeServlet extends HttpServlet {
	
	//随机
	private final Random rm = new Random();

	/**
	 * 访问的时候 动态的创建一张图片
	 */
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		int width = 100;
		int height = 50;
		//创建一个图片对象
		BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
		//获取绘图对象
		Graphics  g = image.getGraphics();
		//绘制背景  绘制一个 填充的矩形
		g.setColor(Color.WHITE); //设置画笔的颜色
		g.fillRect(0, 0, width, height);   //绘制填充的矩形
		
		g.setColor(Color.RED); 
		g.drawRect(0, 0, width-2, height-2);   //绘制矩形框
		
		//绘制一些干扰 点
		for(int i=0;i<100;i++) {
			g.setColor(new Color(rm.nextInt(255),rm.nextInt(255),rm.nextInt(255))); 
			g.fillOval(rm.nextInt(width), rm.nextInt(height), 3, 3);
		}
		
		//绘制干扰线
		for(int i=0;i<50;i++) {
			g.setColor(new Color(rm.nextInt(255),rm.nextInt(255),rm.nextInt(255))); 
			g.drawLine(0, rm.nextInt(height), rm.nextInt(width), rm.nextInt(height));
		}
		
		
		g.setFont(new Font("黑体", Font.BOLD, 30)); //设置字体
		
		//随机产生的验证码
		String source = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz123456790";
		String code = "";
		for(int i=0;i<4;i++) {
			String  s = source.charAt(rm.nextInt(source.length()))+"";
			
			//绘制文字
			g.setColor(new Color(rm.nextInt(255),rm.nextInt(255),rm.nextInt(255))); 
			g.drawString(s, 10+i*23, 35);
			
			code+= s;
		}
		System.out.println("code="+code);
		//存入会话
		request.getSession().setAttribute("Code", code);
		
		
		//输出图片
		ImageIO.write(image, "jpg", response.getOutputStream());
	}
}

二.验证码校验

package com.igeek.web;

import java.io.IOException;

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 javax.servlet.http.HttpSession;

/**
 * 校验验证码的Servlet
 */
@WebServlet("/check.do")
public class CheckVerificationCodeServlet extends HttpServlet {

	/**
	 * 传递一个输入的值,验证和会话中存放的验证码是否一致
	 */
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		
		String str_code = request.getParameter("str_code");
		
		//得到会话
		HttpSession session = request.getSession();
		String code = (String)session.getAttribute("Code");
		code = code==null?"":code;
		
		response.getWriter().print(code.equals(str_code));
		
	}
}

三.页面

<%@ page contentType="text/html;charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>页面标题</title>
<script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>

<script type="text/javascript">

//校验输入框中输入的验证码是否正确
$(function(){
	$("#varification").blur(function(){
		//
		$.get("check.do",{"str_code":$(this).val()},function(rs){
			console.log(rs);
			if(rs=='true'){
				$("#sp").css({"color":"green"}).text("OK");
			}else{
				$("#sp").css({"color":"red"}).text("ERROR");
			}
		})
		
	});
	
});


//点击换验证码图片 注意:每次更换图片的src值必须不同,这里拼接随机数 Math.random()
function changeImg(){
	var  vv = document.getElementById("varificationCode");
	vv.src="verification.jpg?rm"+Math.random();
}
</script>
</head>
<body>

<input   id="varification" placeholder="请输入验证码">
<a href="JavaScript:changeImg();">
<img alt="验证码"  id="varificationCode"  src="verification.jpg">
</a>
<a href="JavaScript:changeImg();">看不清楚,换一张?</a>

<br>
<span id="sp"></span>


</body>
</html>

 --------------------------------------------------------------------------------------------------------------------------------------------------------------------

第二中验证码:

代码

   /**
     * 获取验证码
     * 
     * @param request a
     * @param response a
     * @return a
     */
    public ModelAndView getValiYard(HttpServletRequest request,
            HttpServletResponse response)
    {
        try
        {
            // 设置页面不缓存
            BaseMultiController.initSet(request, response);
            String valiyard = request.getParameter("valiyard");
            HttpSession session = request.getSession(true);
            // 在内存中创建图象
            int width = 90;
            int 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("Times New Roman", Font.PLAIN, 18));
            // 随机产生50条干扰线,使图象中的认证码不易被其它程序探测到
            g.setColor(getRandColor(160, 200));
            for (int i = 0; i < 50; 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);
            }
            // 取随机产生的认证码(6位数字)
            String sRand = "";
            for (int i = 0; i < 6; 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))); // 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
                g.drawString(rand, 13 * i + 6, 16);
            }
            // 将认证码存入SESSION
            session.setAttribute(valiyard, sRand);
            // 图象生效
            g.dispose();
            // 输出图象到页面
            javax.servlet.ServletOutputStream out = response.getOutputStream();
            ImageIO.write(image, "JPEG", out);
            out.flush();
            out.close();
        }
        catch (Exception e)
        {
            logger.writeLog(logger.LOG_LEVEL_ERROR,
                    logger.getExceptionMethodHint(), e);
        }
        return null;
    }

    /**
     * 随机的颜色
     * @param fc fc
     * @param bc bc
     * @return a
     */
    private 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);
    }

页面:

<td style='padding-top: 5px;'>
									<img id="checkCodeImg" name="checkCodeImg"
										src="servlet/CheckCodeServlet?t=1312795073192"
										onclick="javaScript:document.getElementById('checkCodeImg').src='servlet/CheckCodeServlet?t='+(new Date().getTime())" />
								</td>

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_无往而不胜_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值