快速业务通道

Java实现随机验证码功能实例 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18

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

时间:2011-03-05

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

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

在这里,我们使用servlet来实现随机验证码的实现。

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, fontHeigh

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号