随机验证码实现案例

众所周知,验证码在我们的生活中都是非常常见的,很多公司都在各种折腾各种各样的验证码,这里简要的用一个小案例来实现验证码的功能(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-09-29 10:09:21

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

Android通过自定义View实现随机验证码_Android

很多的Android入门程序猿来说对于Android自定义View,可能都是比较恐惧的,但是这又是高手进阶的必经之路,所有准备在自定义View上面花一些功夫,多写一些文章. 一.问题描述 熟悉web开发中童鞋们都知道为了防止恶意破解.恶意提交.刷票等我们在提交表单数据时,都会使用随机验证码功能.在Android应用中我们同样需要这一功能,该如何实现呢,下面我们就自定义一个随机验证码View控件实现这一需求,并且具备通用性,需要的时候在界面中直接加入这个View组件即可. 二.案例介绍 案例运行效

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

很多的Android入门程序猿来说对于Android自定义View,可能都是比较恐惧的,但是这又是高手进阶的必经之路,所有准备在自定义View上面花一些功夫,多写一些文章. 一.问题描述 熟悉web开发中童鞋们都知道为了防止恶意破解.恶意提交.刷票等我们在提交表单数据时,都会使用随机验证码功能.在Android应用中我们同样需要这一功能,该如何实现呢,下面我们就自定义一个随机验证码View控件实现这一需求,并且具备通用性,需要的时候在界面中直接加入这个View组件即可. 二.案例介绍 案例运行效

随机验证码的实现思路

随机|验证码 chinaren校友录上留言会随机出现几个数字图片,下面是对话框要求输入上面的数字表示确认.这些数字是随机出现的,但对于每一次提交都有这么一个确认数字,可以避免用户用其他方式登录,而只能从这个页面进行登录登陆页面:登陆入口.随即显示几个数字.我用session记录随即数字. 处理页面,看输入的数字和session记录的是否相同同则:{看用会名和密码是否和数据库中一样.{同:登陆成功!同时把session写入数据库中.//此项可选择\r}不同:{密码/用户名错误!}}不同则:{返回!

Java实现随机验证码功能实例

现在许多系统的注册.登录或者发布信息模块都添加的随机码功能,就是为了避免自动注册程序或者自动发布程序的使用. 验证码实际上就是随机选择一些字符以图片的形式展现在页面上,如果进行提交操作的同时需要将图片上的字符同时提交,如果提交的字符与服务器session保存的不同,则认为提交信息无效.为了避免自动程序分析解析图片,通常会在图片上随机生成一些干扰线或者将字符进行扭曲,增加自动识别的难度. 在这里,我们使用servlet来实现随机验证码的实现. package com.servlet; import

JSP实例:Java实现随机验证码功能实例

现在许多系统的注册.登录或者发布信息模块都添加的随机码功能,就是为了避免自动注册程序或者自动发布程序的使用. 验证码实际上就是随机选择一些字符以图片的形式展现在页面上,如果进行提交操作的同时需要将图片上的字符同时提交,如果提交的字符与服务器session保存的不同,则认为提交信息无效.为了避免自动程序分析解析图片,通常会在图片上随机生成一些干扰线或者将字符进行扭曲,增加自动识别的难度. 在这里,我们使用servlet来实现随机验证码的实现.   package com.servlet; impo

php制作动态随机验证码

 这篇文章主要介绍了php制作动态随机验证码的方法的相关资料,需要的朋友可以参考下     验证码(CAPTCHA)是"Completely Automated Public Turing test to tell Computers and Humans Apart"(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序.可以防止:恶意破解密码.刷票.论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证

Java实现随机验证码功能

现在许多系统的注册.登录或者发布信息模块都添加的随机码功能,就是为了避免自动注册程序或者自动发布程序的使用.    验证码实际上就是随机选择一些字符以图片的形式展现在页面上,如果进行提交操作的同时需要将图片上的字符同时提交,如果提交的字符与服务器session保存的不同,则认为提交信息无效.为了避免自动程序分析解析图片,通常会在图片上随机生成一些干扰线或者将字符进行扭曲,增加难度.     我们可以使用servlet来实现随机验证码的实现.    package com.servlet; imp

解析Java实现随机验证码功能的方法详解_java

现在许多系统的注册.登录或者发布信息模块都添加的随机码功能,就是为了避免自动注册程序或者自动发布程序的使用.验证码实际上就是随机选择一些字符以图片的形式展现在页面上,如果进行提交操作的同时需要将图片上的字符同时提交,如果提交的字符与服务器session保存的不同,则认为提交信息无效.为了避免自动程序分析解析图片,通常会在图片上随机生成一些干扰线或者将字符进行扭曲,增加难度.    我们可以使用servlet来实现随机验证码的实现. 复制代码 代码如下: package com.servlet; 

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

对于android开发来说自定义View还是一个比较重要的技能,所以在这里写一篇自定义View入门的文章,也是实现一个相对简单的随机产生验证码的功能: 自定义View主要也就分为几步 1.自定义View的属性  2.在我们的自定义的布局中获取自定义属性  3.重写onMesure方法  4.重写onDraw方法 好现在我们就一步一步的来,首先创建我们的View属性 在valuse目录下创建一个attrs.xml的文件,然后: <?xml version="1.0" encodin