makeCheckcode.java

  package pic;
  import java.awt.Color;
  import java.awt.Font;
  import java.awt.Graphics;
  import java.awt.image.BufferedImage;
  import java.io.IOException;
  import java.io.OutputStream;
  import java.util.Random;
  import javax.imageio.ImageIO;
  
  public class 
makeCheckcode
 {
  //验证码图片中可以出现的字符集,可根据需要修改
  private char mapTable[]={
  '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 String getCertPic(int width, int height, OutputStream os) {
  if(width<=0)width=60;
  if(height<=0)height=20;  
  BufferedImage image = new BufferedImage(width, height,  
  BufferedImage.TYPE_INT_RGB);  
  // 获取图形上下文  
  Graphics g = image.getGraphics();  
  // 设定背景色  
  g.setColor(new Color(0xDCDCDC));  
  g.fillRect(0, 0, width, height);  
  //画边框  
  g.setColor(Color.black);  
  g.drawRect(0,0,width-1,height-1);  
  // 取随机产生的认证码
  String strEnsure = "";
  // 4代表4位验证码,如果要生成更多位的认证码,则加大数值
  for(int i=0; i<4; ++i) {
strEnsure+=mapTable[(int)(mapTable.length*Math.random())];
  }   
  //   将认证码显示到图像中,如果要生成更多位的认证码,增加drawString语句
  g.setColor(Color.black);  
  g.setFont(new Font("Atlantic Inline",Font.PLAIN,18));  
  String str = strEnsure.substring(0,1);  
  g.drawString(str,8,17);  
  str = strEnsure.substring(1,2);  
  g.drawString(str,20,15);  
  str = strEnsure.substring(2,3);  
  g.drawString(str,35,18);   
  str = strEnsure.substring(3,4);  
  g.drawString(str,45,15);  
  // 随机产生10个干扰点
  Random rand = new Random();
  for (int i=0;i<10;i++) {  
  int x = rand.nextInt(width);  
  int y = rand.nextInt(height);  
  g.drawOval(x,y,1,1);  
  }  
  // 释放图形上下文
  g.dispose();   
  try {
  // 输出图像到页面  
  ImageIO.write(image, "JPEG", os);
  } catch (IOException e) {
  return "";
  }   
  return strEnsure;
  }
  }

  在getCertPic()方法中,首先创建了一个内存图像的实例对象,再得到此内存图像的图形上下文对象,接着再用这个上下文对象画背景、边框。接下来,随机生成4个在mapTable[]数组中的字符,组成字符串作为验证字符串,并输出在内存中,为了造成一定的干扰,随机画了10个干扰点,如果要加大干扰效果,可再多画一些点。
makeCertPic.jsp页面用于调用生成验证码图片的JavaBean,并在客户端显示,源代码如下:
  makeCertPic.jsp
  <%@page contentType="image/jpeg" %>
  <jsp:useBean id="image" scope="page" class="pic.makeCertPic" />
  <%
  String str=image.getCertPic(0,0,response.getOutputStream());
     // 将认证码存入SESSION
  session.setAttribute("certCode", str);

  out.clear();
   out = pageContext.pushBody();
  %>

  这里把生成的验证码作为session变量写入,因此在接收登录页面输入的数据页面中,可用用户输入的验证码和这个session变量作比较,如果相同则表示验证通过。
  LoginPic.jsp
  <%@ page contentType="text/html;charset=GB2312" %>

<script type="text/javascript">
  function reloadcode(){
  var verify=document.getElementByIdx_x('code');
  verify.setAttribute('src','makeCertPic.jsp?it='+Math.random());
  }
</script>
  <html>
   <head><title>登录页面</title></head>
   <body>
    <table align="center" border="0">
  <tralign="center"><td><fontcolor="red"><html:errors/></font></td></tr>
   <tr align="center"><td>系统登录</td></tr>
   <form. action="loginCheck.jsp" method="post" focus="username">
   <tr><td>用户名:<input type="text" name="username"/></td></tr>
   <tr><td>密&nbsp;&nbsp;码:<input type="password"name="password"/></td></tr>
   <tr><td>验证码<img src="makeCertPic.jsp" id="code" onclick="reloadcode()" style="cursor: pointer;" alt="看不清楚,换一张"> </td></tr>
<tralign="left"><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
   <input type="submit" value="确定"/></td></tr>
   </form>
   </table>
   </body>
  </html>

在Servlet中判断验证码的输入是否正确:
  String certCode=request.getParameter("certCode");

//certCode为用户输入的验证码
  if(certCode.equals((String)session.getAttribute("certCode")))
  out.print("验证码输入正确");
  else
  out.print("验证码输入错误");

验证码 java实现的程序的更多相关文章

  1. 简单java在线测评程序

    简单java程序在线测评程序 一.前言 大家过年好!今年的第一篇博客啊!家里没有网,到处蹭无线!日子过得真纠结!因为毕设的需求,简单写了一个java程序在线测评程序,当然也可以在本地测试. 二.思路 ...

  2. java编译错误 程序包javax.servlet不存在javax.servlet.*

    java编译错误 程序包javax.servlet不存在javax.servlet.* 编译:javac Servlet.java 出现 软件包 javax.servlet 不存在 软件包javax. ...

  3. 使用IzPack打包JAVA Web应用程序

    使用IzPack打包JAVA Web应用程序步骤如下: 这里使用IzPack-4.3.5 + launch4j-3.1.0-beta1-win32.zip(绿色版)对Web应用程序打包,打包后即可对我 ...

  4. 《疯狂Java:突破程序员基本功的16课》读书笔记-第二章 对象与内存控制

    Java内存管理分为两个方面:内存分配和内存回收.这里的内存分配特指创建Java对象时JVM为该对象在堆内存中所分配的内存空间.内存回收指的是当该Java对象失去引用,变成垃圾时,JVM的垃圾回收机制 ...

  5. 【转】Tomcat中部署java web应用程序

    http://www.blogjava.net/jiafang83/archive/2009/06/02/279644.html 转载:今天给大家介绍怎样在Tomcat5.5.9中部署Java Web ...

  6. 在Tomcat中部署Java Web应用程序

    在Tomcat中部署Java Web应用程序有两种方式:静态部署和动态部署.在下文中$CATALINA_HOME指的是Tomcat根目录. 一.静态部署      静态部署指的是我们在服务器启动之前部 ...

  7. Java中获得程序当前路径的4中方法

    Java中获得程序当前路径的4中方法: 在Application中: import java.util.*; public class TestUserDir { public static void ...

  8. 简单java web应用程序搭建与部署

    1. 准备工作 工具:tomcat.editplus.jdk.windows操作系统 操作:在windows操作系统上安装jdk.tomcat.editplus,配置JAVA_HOME,Path,CL ...

  9. 简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行

    [TOC] 简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行 程序源码 import java.io.IOException; import java.util. ...

随机推荐

  1. c++ 虚基类应用

    多重继承存在二义性,为了消除二义性在访问相同名称的属性时需要加上类名,加以区分.虽然这样可以解决二义性,但是相同的属性出现在多个基类中,为了解决数据冗余,c++引入了虚基类. 虚基类定义:class ...

  2. js点赞效果图

    点赞时点赞图标会发生变化. html部分: <img src="img/icon_thumb_up.png" id="imgs1" style=" ...

  3. Django-rest-framework(八)使用技巧(持续补充中)

    当viewset中,多个action对应了不同的serializers的时候 class UserView(viewsets.GenericViewSet): queryset = User.obje ...

  4. Django-rest-framework(六)filter,ordering,search

    filter queryset 使用request.user相关的queryset class PurchaseList(generics.ListAPIView): serializer_class ...

  5. BionicApi 学习笔记

    1.内存管理 malloc, realloc, free new, delete2.文件输入操作 fopen, fwrite, fputs, fputc, fprintf, fflush fread, ...

  6. 'version' contains an expression but should be a constant. @ line 13, column 11问题的解决

    <modelVersion>4.0.0</modelVersion> <groupId>cy.nad.cyg</groupId> <artifac ...

  7. MySQL表结构(含数据类型、字段备注注释)导出成Excel

    方法一: 1.用的是Navicat Premium,可以换成任意图形化客户端 SELECT COLUMN_NAME 列名, COLUMN_TYPE 数据类型, DATA_TYPE 字段类型, CHAR ...

  8. iOS:常用属性、方法

    前言:一段时间没接触,很容易就忘记以前的知识.专写一篇,供几个月没接触,拿起却忘记了. 0.宏定义.系统相关 0-1).宏定义.规范 变量: //全局变量通常用小写g来提示 int gNumb=0; ...

  9. 给xcode项目重命名

    在xcode项目开发中,经常会遇到需要修改项目名字的问题, 但是xcode本身修改项目名字比较麻烦,有时候修改的不完全,有时候修改了项目无法打开,无奈只能建一个新项目.这里提供一种修改xcode项目名 ...

  10. git使用简介(一)

    附上廖雪峰老师Git教程https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 创建版本 ...