Java实现随机验证码功能实例代码
Java实现随机验证码功能实例代码
发布时间:2016-12-28 来源:查字典编辑
摘要:现在许多系统的注册、登录或者发布信息模块都添加的随机码功能,就是为了避免自动注册程序或者自动发布程序的使用。验证码实际上就是随机选择一些字符...

现在许多系统的注册、登录或者发布信息模块都添加的随机码功能,就是为了避免自动注册程序或者自动发布程序的使用。

验证码实际上就是随机选择一些字符以图片的形式展现在页面上,如果进行番茄花园xp系统下载提交操作的同时需要将图片上的字符同时提交,如果提交的字符与服务器session保存的不同,则认为提交信息无效。为了避免自动程序分析解析图片,通常会在图片上随机生成一些干扰线或者将字符进行扭曲,增加自动识别的难度。

复制代码 代码如下:

package com.servlet;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics2D;

import java.awt.image.BufferedImage;

import java.util.Random;

import javax.imageio.ImageIO;

import javax.servlet.ServletException;

import javax.servlet.ServletOutputStream;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

/**

* 生成随机验证码

* @author bitiliu

*

*/

public class ValidateCodeServlet extends HttpServlet

{

private static final long serialVersionUID = 1L;

//验证码图片的宽度。

private int width=60;

//验证码图片的高度。

private int height=20;

//验证码字符个数

private int codeCount=4;

private int x=0;

//字体高度

private int fontHeight;

private int codeY;

char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',

'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',

'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };

/**

* 初始化验证图片属性

*/

public void init() throws ServletException

{

//从web.xml中获取初始信息

//宽度

String strWidth=this.getInitParameter("width");

//高度

String strHeight=this.getInitParameter("height");

//字符个数

String strCodeCount=this.getInitParameter("codeCount");

//将配置的信息转换成数值

try

{

if(strWidth!=null && strWidth.length()!=0)

{

width=Integer.parseInt(strWidth);

}

if(strHeight!=null && strHeight.length()!=0)

{

height=Integer.parseInt(strHeight);

}

if(strCodeCount!=null && strCodeCount.length()!=0)

{

codeCount=Integer.parseInt(strCodeCount);

}

}

catch(NumberFormatException e)

{}

x=width/(codeCount+1);

fontHeight=height-2;

codeY=height-4;

}

protected void service(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, java.io.IOException {

//定义图像buffer

BufferedImage buffImg = new BufferedImage(

width, height,BufferedImage.TYPE_INT_RGB);

Graphics2D g = buffImg.createGraphics();

//创建一个随机数生成器类

Random random = new Random();

//将图像填充为白色

g.setColor(Color.WHITE);

g.fillRect(0, 0, width, height);

//创建字体,字体的大小应该根据图片的高度来定。

Font font = new Font("Fixedsys", Font.PLAIN, fontHeight);

//设置字体。

g.setFont(font);

//画边框。

g.setColor(Color.BLACK);

g.drawRect(0, 0, width - 1, height - 1);

//随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Java学习
热门Java学习
编程开发子分类