`
zhaoshijie
  • 浏览: 2262779 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

验证码实现

 
阅读更多
关键字:验证码的实现



servlet代码:



package com.sinosoft.edu.common;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

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 linzhen
*
*/
public class ValidateCodeServlet extends HttpServlet {

private static int WIDTH = 66;  
    private static int HEIGHT = 20;  
    private static int LENGTH = 4;  

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {

this.doPost(req, resp);
}


protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

HttpSession session = request.getSession();  
 
         response.setContentType("image/jpeg");  
 
         ServletOutputStream sos = response.getOutputStream();  
 
         //设置浏览器不要缓存此图片  
         response.setHeader("Pragma","No-cache");  
         response.setHeader("Cache-Control","no-cache");  
         response.setDateHeader("Expires", 0);  
 
         //创建内存图象并获得其图形上下文  
         BufferedImage image =   
                new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);   
 
         Graphics g = image.getGraphics();  
 
         //产生随机的认证码  
         char [] rands = generateCheckCode();  
 
         //产生图像  
         drawBackground(g);  
 
         drawRands(g,rands);  
 
         //结束图像的绘制过程,完成图像  
         g.dispose();  
 
         //将图像输出到客户端  
         ByteArrayOutputStream bos = new ByteArrayOutputStream();  
 
         ImageIO.write(image, "JPEG", bos);  
 
         byte [] buf = bos.toByteArray();  
 
         response.setContentLength(buf.length);  
 
         //下面的语句也可写成:bos.writeTo(sos);  
         sos.write(buf);  
         bos.close();  
         sos.close();  
//System.out.print("*validateCodeservlei");
         //将当前验证码存入到Session或者数据库中,下一个表单处理中验证客户端提交的验证码是否正确  
         session.setAttribute("check_code",new String(rands));  
}

private static char [] generateCheckCode()  
    {  
       //定义验证码的字符表  
       String chars = "23456789ABCDEFGHKMNPQRSTUVWXYZ";  
 
       char [] rands = new char[LENGTH];  
       for(int i=0; i<LENGTH; i++)  
 
       {  
          int rand = (int)(Math.random() * 30);  
          rands[i] = chars.charAt(rand);  
       }  
 
       return rands;  
    }  

private void drawRands(Graphics g , char [] rands)   
    {  
       g.setColor(Color.BLACK);  
       g.setFont(new Font(null,Font.ITALIC|Font.BOLD,18));  

       //在不同的高度上输出验证码的每个字符           
       g.drawString("" + rands[0],1,17);  
       g.drawString("" + rands[1],16,15);  
       g.drawString("" + rands[2],31,18);  
       g.drawString("" + rands[3],46,16);  
//       g.drawString("" + rands[4],61,14);  
//       g.drawString("" + rands[5],76,19);  

      // //System.out.println(rands);  
    }  

private void drawBackground(Graphics g)  
 
    {  
        //画背景  
       g.setColor(new Color(0xDCDCDC));  
       g.fillRect(0, 0, WIDTH, HEIGHT);  

       //随机产生120个干扰点  
       for(int i=0; i<120; i++)  

       {  
          int x = (int)(Math.random() * WIDTH);  

          int y = (int)(Math.random() * HEIGHT);  

          int red = (int)(Math.random() * 255);  

          int green = (int)(Math.random() * 255);  

          int blue = (int)(Math.random() * 255);  

          g.setColor(new Color(red,green,blue));          

          g.drawOval(x,y,1,0);  

       }  
         
       //加两条干扰线  
       g.drawLine(0, 5, 90, 5);  
       g.drawLine(0, 15, 90, 15);  

    }  

}




jsp代码:


<img width="66" height="20" onclick="changeImg();" style="cursor:hand;" title='看不清楚? align="middle" id='imgsrc' src="ImgValidateServlet" />



附件是一个完整的工程,不过是我个性的设置,大家可以根据这个例子自己改一下!!!

至于字体(附件有 验证码支持的字体)、颜色、几位数、图片大小 等问题 自己修改 servlet内容即可!!!

分享到:
评论

相关推荐

    详细介绍Java阿里云的短信验证码实现

    Java阿里云短信验证码实现 Java阿里云短信验证码实现是指通过阿里云短信服务平台发送短信验证码的实现,以下是该实现的详细介绍。 登录阿里云开放平台 在实现Java阿里云短信验证码之前,需要首先登录阿里云开放...

    中文及字母数字验证码实现

    在“中文及字母数字验证码实现”中,系统会从预设的汉字库和字母数字集合中随机抽取一定数量的字符。为了增加破解难度,这些字符可以包含大小写字母、数字以及中文字符。 2. **乱序排列**:抽取的字符会被随机排列...

    javaWeb使用验证码实现简单登录

    JavaWeb使用验证码实现简单登录 在JavaWeb开发中,验证码是一种常用的安全机制,用于防止机器人和恶意攻击。下面将详细介绍如何使用验证码实现简单登录功能。 验证码的原理 验证码的原理是基于HTTP协议的请求响应...

    jsp验证码实现源代码

    jsp验证码实现源代码2008年05月06日 星期二 10:06在开发中验证码是比较常用到有效防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试的方式。

    动态滑动后端验证码实现

    动态滑动后端验证码是一种常见的安全验证...总之,动态滑动验证码的实现涉及服务器端的图片处理和验证逻辑,以及前端的图片显示和用户交互。它在保障网站安全的同时,也要求开发者在用户体验和安全防护之间找到平衡。

    STRUTS2验证码实现

    struts2图形验证码实现,两个实现类,和你一个action类

    beego框架图形验证码实现

    【beego框架图形验证码实现】是使用Go语言开发的一个高效且功能丰富的图形验证码库,它为Web应用提供了安全的验证码生成服务。这个库的核心目的是为了防止自动化程序(如机器人)进行非法操作,如批量注册、恶意登录...

    javaweb验证码实现demo

    总的来说,“javaweb验证码实现demo”涵盖了从生成随机字符串到绘制图像,再到验证用户输入的整个过程,是学习和理解Java Web验证码实现的一个实用示例。通过分析和实践这个demo,开发者可以更好地理解和掌握验证码...

    Java验证码实现源码

    在提供的压缩包文件"Java验证码实现"中,可能包含了实现以上步骤的Java源代码文件,包括主类、图像处理类和可能的配置文件。通过学习和理解这些代码,你可以进一步掌握Java验证码的实现细节,并将其应用到自己的项目...

    基于struts1.x的验证码实现

    总结来说,基于Struts1.x的验证码实现是Web开发中的重要环节,它涉及到服务器端的生成、存储、验证,以及客户端的显示和用户交互。通过合理的验证码设计和实现,可以显著提高Web应用程序的安全性,保护用户的账户不...

    JAVA和HTML5实现的多种验证码实现

    在学习这些验证码实现时,你可以通过查看压缩包中的"validateCode"源码文件来深入了解每个验证码的具体实现细节。同时,"截图"可能包含各个验证码的示例图像,帮助理解其外观和工作原理。此外,"关注科帮网获取更多...

    验证码实现的小demo

    在这个"验证码实现的小demo"中,我们将探讨验证码的基本概念、实现原理以及常见类型。 验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”的缩写,即全自动区分...

    Php各种验证码实现

    以下是一个简单的GD库验证码实现步骤: 1. 生成随机字符串:使用`rand()`或`mt_rand()`函数生成一定长度的随机字符串。 2. 创建图像:使用`imagecreatetruecolor()`函数创建一个新的图像资源。 3. 设置背景:使用`...

    【ASP.NET编程知识】ASP.NET验证码实现(附源码).docx

    "ASP.NET 验证码实现详解" ASP.NET 验证码实现是 ASP.NET 编程中的一种常见技术,用于生成验证码图片,以防止恶意攻击和自动注册。下面将详细介绍 ASP.NET 验证码实现的知识点: 一、验证码生成 在 ASP.NET 中,...

    基于Python的团队激励与沟通验证码实现设计源码

    本资源提供了一套基于Python的团队激励与沟通验证码实现的设计源码,包含65个文件,其中包括27个Python字节码文件,16个Python源代码文件,以及6个HTML页面文件。此外,还包括4个PNG图片文件,3个字体文件,以及3个...

    验证码实现(随机背景色及字体颜色,带扰乱线条)

    在这个“验证码实现(随机背景色及字体颜色,带扰乱线条)”的项目中,我们将探讨如何创建一个具有随机背景色、字体颜色以及扰乱线条的图像验证码。 首先,`CreatImage.java`是生成验证码图像的核心类。在这个类中...

    前端验证码实现.zip

    在前端开发中,验证码是一种常见的安全机制,用于防止自动化脚本或机器人进行恶意操作,比如防止刷票、垃圾...这个项目“前端验证码实现.zip”将详细展示这些步骤和实现细节,帮助开发者深入理解前端验证码的实现过程。

    红马版验证码实现(中文+变形+噪点)asp.net+C#

    在“红马版验证码实现(中文+变形+噪点)asp.net+C#”中,我们将探讨如何使用ASP.NET和C#编程语言创建一个具有中文字符、形状变形和随机噪点的复杂验证码系统。 首先,验证码的核心在于生成随机但可读的字符串。在...

    vc+.net验证码实现

    vc++验证码实现,运用vs2010开发工具

Global site tag (gtag.js) - Google Analytics