随机验证码实现案例

众所周知,验证码在我们的生活中都是非常常见的,很多公司都在各种折腾各种各样的验证码,这里简要的用一个小案例来实现验证码的功能(ps:其实我挺讨厌验证码这个东西的)。

建立一个javaweb工程,新建login.html,在里面主要是写界面,代码实现如下,写在body区就可以了,来一个表单验证

<body>
    <form action="">
    	username:<input/><br/>
    	password:<input/><br/>
    	验证码:<input name="code"/><img id="image1" src="/day08_response/servlet/responseDemo4"/>
    		<input type="button" value="看不清,换一张" onclick="change()"/>
    	<br/>
    	<input type="submit" value="登陆"/>
    </form>
    <script type="text/javascript">
    	function change(){
    		var imageObj = document.getElementById("image1");
    		//地址一样,浏览器不会发出请求
    		imageObj.src="/day08_response/servlet/responseDemo4?time="+new Date().getTime();
    	}
    </script>
  </body>

然后我们需要新建一个servlet类,实现验证码我们可以有两种方式,一种是自己写,如下:颜色可以直接配置就好,好吧,鉴于我的审美观有限,貌似这种颜色搭配起来挺丑的。

private void test1(HttpServletResponse response) throws IOException {
		int width=110;
		int height=25;
		//1构建一幅内存图片BufferedImage
		BufferedImage bi=new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);

		//3.图片上的画笔
		Graphics g=bi.getGraphics();
		g.setColor(Color.green);
		g.drawRect(0, 0, width, height);   //画矩形边线

		//4填充背景色
		g.setColor(Color.gray);
		g.fillRect(1, 1, width, height);

		//5干扰线
		g.setColor(Color.yellow);
		Random r=new Random();
		for(int i=0;i<20;i++)
			g.drawLine(r.nextInt(width), r.nextInt(height),r.nextInt(width), r.nextInt(height));

		//6数字验证码
		g.setColor(Color.BLACK);
		g.setFont(new Font("宋体",Font.BOLD|Font.ITALIC,13));//加粗倾斜
		int x=20;
		for(int i=0;i<4;i++){
			g.drawString(r.nextInt(10)+"",x,20);
			x+=20;
		}
		//2输出响应对象的字节流输出流
		ImageIO.write(bi, "jpg", response.getOutputStream());
	}

还有一种方法可以使用,开源框架validate.jar,导入这个jar包,两行代码就可以搞定,当然了,如果你想要更好的效果,你可以自己写或者看里面的.class中的源码,自己进行修改,这里就不在多废话了。

//开源框架实现
		ValidateCode vc=new ValidateCode(110, 25, 4, 30);//第一个参数是宽,第二个是高,第三个是验证码的数目,第四个是干扰线的条数
		vc.write(response.getOutputStream());

最后,我们还需要清除一下浏览器的缓存,我们都知道,清除缓存当然是用那三种方法啦。

//清除缓存
		response.setIntHeader("Expires", -1);
		response.setHeader("Cache-Control", "no-cache");
		response.setHeader("Pragma", "no-cache");

哦?你还不满意,好吧,那我们再加一个定时刷新的功能吧!

第一种刷新方式是直接刷新:

private void test1(HttpServletResponse response) throws IOException {
		response.setIntHeader("Refresh", 1);//单位是秒
		Random r = new Random();
		response.getWriter().write(r.nextInt()+"");
	}

当然,我们还可以来那种倒计时几秒钟就跳转到其他页面的这种效果,

//刷新到别处
	private void test2(HttpServletResponse response) throws IOException {
		response.setContentType("text/html;charset=UTF-8");
		response.getWriter().write("注册成功!2秒后自动转向登陆页面。");
		response.setHeader("Refresh", "2;URL=/day08_response/login.html");//单位是秒
	}

下面再来说一下控制浏览器缓存时间的实现方法:

response.setDateHeader("Expires", System.currentTimeMillis()+1*60*60*1000);//取值是一个毫秒值。如果该值小于当前时间,则不缓存。
												//如果大于当前时间,缓存的时间是:值-当前时间。
		response.getWriter().write("hello");

好吧,基本上说完了,将以上知识整个起来就可以实现你的一个项目的功能了,快去试试吧!

时间: 2024-10-28 15:36:11

随机验证码实现案例的相关文章

python的内置模块random随机模块方法详解以及使用案例(五位数随机验证码的实现)

1.random(self): Get the next random number in the range [0.0, 1.0) 取0到1直接的随机浮点数 import random print(random.random()) C:\python35\python3.exe D:/pyproject/day21模块/random随机模块.py 0.3105503800442595 2.randint(self, a, b) Return random integer in range [a

Android实现随机验证码——自定义View

一.问题描述 熟悉web开发中童鞋们都知道为了防止恶意破解.恶意提交.刷票等我们在提交表单数据时,都会使用随机验证码功能.在Android应用中我们同样需要这一功能,该如何实现呢,下面我们就自定义一个随机验证码View控件实现这一需求,并且具备通用性,需要的时候在界面中直接加入这个View组件即可. 二.案例介绍 案例运行效果 案例所涉及组件 1.CheckView 自定义的验证码控件,主要重写onDraw方法实现图形绘制 2.Config:用于对验证码控件参数的配置,像画点点数.划线数.背景颜

生成6位的随机验证码

要求:生成6位的字母和数字组成的随机验证码. 实例1: 1 import random 2 identify_code='' 3 for i in range(1): 4 for j in range(6): 5 if i==j: 6 code=chr(random.randint(65,90)) 7 else: 8 code=random.randint(0,9) 9 identify_code+=str(code) 10 11 print(identify_code) 实例2: 1 impo

Django之路 - 实现登录随机验证码

登录验证码是每个网站登录时的基本标配,网上也有很多相应的文章, 但是从生成验证码到 应用到自己的网站上的全步骤,并没有看到很多, 为了节约大家的时间,我把整体步骤写下来, 即拿即用哈 1. 生成随机验证码  随机验证码代码 2. 如何应用到你的django项目中 整个验证码的流程如下 用户访问登录页面,你的后台程序在给用户返回登录页面时,同时生成了验证码图片 用户输入账户信息和验证码数字,提交表单 后台判断用户输入的验证码和你生成的图片信息是否一致,如果一致,就代表验证码是没有问题的 问题就卡在

学习python:实例2.用PIL生成随机验证码

效果: 代码: # 生成随机验证码图片 import string from random import randint, sample from PIL import Image, ImageDraw, ImageFont, ImageFilter # Image 负责处理图片 # ImageDraw 画笔 # ImageFont 文字 # ImageFileter 滤镜 # 定义变量 img_size = (150,50)        # 定义画布大小 img_rgb = (255,255

输出随机验证码图片

1 /** 2 * //输出随机验证码图片:CAPTCHA图像 3 */ 4 public class ServletDemo1 extends HttpServlet { 5 private static final long serialVersionUID = 1L; 6 7 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOEx

随机验证码

import java.awt.image.BufferedImage; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletExc

利用random生成6位随机验证码

使用random生成6位随机验证码 #!/usr/bin/env python # _*_ coding:utf-8 _*_ import random code = [] for i in range(6):     #可在此处改变条件表达式来调整生成数字的机率     if i == random.randint(0,5):         # 如果随机数与0-5中的随机数相等,生成数字验证码        code.append(str(random.randint(0,9)))     

iPhone:iOS界面,本地生成随机验证码

本文博客,模仿杰瑞教育的一篇博文,并在它的基础上,进行了些许更改.同时在重写的过程中,对自己忽略的地方,进行了重新认识,受益匪浅.文章来源:http://www.cnblogs.com/jerehedu/p/4527707.html 其实这个功能,并不是很实用,但是,对于我们梳理细小的知识点,还是很有必要的. 一,首先,我们需要自定义一个view,这样,我们将图形绘制在里面,init这个view的时候,就可以直接显示了,以后再遇到,就可以“拿来主义”了. codeView.h @property