`

生成随机验证码的方式

 
阅读更多
package cn.identity;

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

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

/**
 * Servlet implementation class IdentityServlet
 */
public class IdentityServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	/*不包含0,O,I,1,这几个难区分*/
	public static final char[] CHARS={'1','2','3','4','5','6','7','8','9','A','B','C','D',
		'E','F','G','H','I','J','K','L','M','N','P','Q','R','S','T','U','V','W','X'};
	/*构建一个随机数*/
	public static Random random=new Random();
	
	/**
	 * 获取4位随机数
	 * @return
	 */
	public static String getRandomString(){
		StringBuffer buffer=new StringBuffer();//字符串缓存
		for(int i = 0 ;i < 4 ;i++){
			buffer.append(CHARS[random.nextInt(CHARS.length)]);//随机去四个,然后追加在每个的后面
		}
		return buffer.toString();//返回这四个随机值,组合成一个字符串
	}
	
	/**
	 * 获取随机颜色
	 * @return
	 */
	public static Color getRandomColor(){
		return new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255));
	}
	
	/**
	 * 回去随机颜色的相反颜色
	 * @param c
	 * @return
	 */
	public static Color getReverseColor(Color c){
		return new Color(255-c.getRed(),255-c.getGreen(),255-c.getBlue());
	}
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		 response.setContentType("image/jpeg");//设置输出类型
		String randomString= getRandomString();//
		request.getSession(true).setAttribute("randomString", randomString);
		int width=80;
		int height=20;
		Color color=getRandomColor();
		
		Color reverse=getReverseColor(color);
		//创建色彩图片
		BufferedImage bi=new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
		//获取绘图对象
		Graphics2D g=bi.createGraphics();
		g.setFont(new Font(Font.SANS_SERIF,Font.BOLD,16));//设置字体
		g.setColor(color);
		g.fillRect(0, 0, width, height);
		g.setColor(reverse);
		g.drawString(randomString, 18, 15);//获取session中的字符串,放在图片上
		
		//绘制干扰点
		for(int i=0 ,n=random.nextInt(20);i<n;i++){
			g.drawRect(random.nextInt(width), random.nextInt(height), 1, 1);
		}
		ServletOutputStream out=response.getOutputStream();
		//转化成jpeg格式
		JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out);
		//编码器
		encoder.encode(bi);
		//输出到客户端
		out.flush();
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

	
}

 

分享到:
评论

相关推荐

    用Python生成随机验证码

    该资源为小编原创的使用Python生成随机验证码的源文件,可供学习制作python验证码的小伙伴们下载

    PHP生成随机验证码

    首先,生成随机验证码的关键是GD库,这是一个PHP的图形处理扩展,允许我们创建和修改图像。在使用PHP生成验证码之前,必须确保GD2扩展已经启用。在PHP的配置文件`php.ini`中,找到`extension=php_gd2.dll`(对于...

    随机生成验证码.html

    HTML实现,有随机生成的验证码+按钮+输入框

    java生成随机验证码

    java生成随机验证码, 这是一个demo, eclipse项目,导入eclipse即可

    用asp.net生成随机验证码

    在ASP.NET中生成随机验证码是一项常见的安全实践,用于防止自动化的机器人或恶意脚本进行非法操作,例如防止垃圾邮件注册、防止重复提交等。验证码通常是一串随机的字符或者数字,用户需要正确输入才能完成相应的...

    asp.net 生成随机验证码

    在ASP.NET中,生成随机验证码是一项...总之,生成随机验证码是ASP.NET开发中的一个重要环节,涉及到字符串随机生成、图形处理和用户交互等多个方面。通过掌握这些技术,我们可以为Web应用程序提供更强大的安全保障。

    java生成的随机验证码

    在Java中,生成随机验证码涉及到多个知识点,包括字符串处理、随机数生成、图像处理以及字体操作等。下面将详细介绍这些内容。 首先,我们要生成随机数字或字母。在Java中,可以使用`java.util.Random`类来生成...

    生成随机验证码和图片

    生成随机验证码和图片,简易使用。 在web项目中随意应用。可自己修改

    asp.net生成随机验证码控件

    在ASP.NET中,生成随机验证码是一项常见的功能,通常用于验证用户身份,防止自动化的机器人或恶意软件进行非法操作,比如防止垃圾邮件发送、注册机等。下面将详细解释如何在ASP.NET中创建一个自定义的随机验证码控件...

    JS生成随机验证码

    JavaScript是一种广泛应用于网页开发的脚本语言,它在生成随机验证码方面有着重要的应用。验证码的主要目的是防止自动化的机器人或恶意程序进行非法操作,例如防止垃圾邮件、刷票等。在这个场景下,JavaScript可以...

    动态生成随机验证码

    用JSP动态生成随机验证码,已经调试通过的demo,很好用的例子,绝对好用!

    随机生成验证码工具jar包

    这个“随机生成验证码工具jar包”是一个Java编写的程序库,它能够帮助开发者快速地在他们的应用中集成验证码功能。让我们深入了解一下这个jar包以及与之相关的Java和jar文件的知识。 首先,Java是一个广泛使用的...

    生成随机前台验证码图片

    生成随机前台验证码图片

    Python实现随机生成验证码

    首先,我们要导入必要的库,包括PIL以及用于生成随机字符串的random和string模块。在`PIL_draw_front.py`文件中,我们可能看到这样的开头: ```python from PIL import Image, ImageDraw, ImageFont import random ...

    Java随机生成六位验证码

    随机验证码。 - 随机生成十组六位字符组成的验证码。 - 验证码由大小写字母、数字字符组成。

    以图片形式,可生成随机验证码,用于登录验证,就如CSDN的验证码

    在本案例中,我们将探讨如何生成以图片形式的随机验证码,就如同CSDN网站上看到的那样。这些文件`frmRandomImage.cs`、`frmRandomImage.Designer.cs`和`frmRandomImage.resx`可能包含了一个简单的Windows Forms应用...

    PHP语言编写的随机验证码的生成

    在PHP编程中,生成随机验证码是一项常见的任务,用于防止机器人自动提交表单或者增加网站安全性。验证码(CAPTCHA)是一种全自动区分计算机和人类的图灵测试,它的主要目的是确保用户是真实的人,而不是自动化程序。...

    servlet生成随机验证码

    本教程将深入讲解如何使用Servlet生成随机验证码。 首先,让我们了解Servlet的基本概念。Servlet是一个Java类,遵循Servlet API规范,它被部署在Web服务器上,用于扩展服务器的功能,处理来自客户端(如浏览器)的...

    QT实现随机生成验证码

    在QT中实现随机生成验证码是一项常见的任务,通常用于用户登录验证、防止机器人操作等安全场景。验证码的目的是通过要求用户输入随机生成的一串字符或图像中的数字,来确保请求是由人类而非机器发起的。 验证码的...

    c#生成随机验证码的源代码(非常简单,注意)

    在C#编程语言中,生成随机验证码是一项常见的需求,特别是在网页开发、安全验证等领域。本文将详细介绍如何使用C#编写一个简单的随机验证码生成器,并提供关键的源代码示例。 验证码(CAPTCHA)的主要目的是防止...

Global site tag (gtag.js) - Google Analytics