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. Android学习笔记_19_广播接收者 BroadcastReceiver及其应用_窃听短信_拦截外拨电话

    一.广播接收者类型: 广播被分为两种不同的类型:“普通广播(Normal broadcasts)”和“有序广播(Ordered broadcasts)”. 普通广播是完全异步的,可以在同一时刻(逻辑上 ...

  2. hbase 数据拷贝

    由于运营数据太大,另外避免影响正常访问,所以需要临时拷贝部分数据到临时表中. bin/hbase org.apache.hadoop.hbase.mapreduce.CopyTable [--star ...

  3. SyncUI跨设备同步

    SynUI控制代码 <script type="text/javascript"> /* SyncUI script (Learn more at http://syn ...

  4. IP地址获取当前地理位置(省份)的接口

    腾讯的接口是 ,返回数组 http://fw.qq.com/ipaddress 返回值 var IPData = new Array("61.135.152.194"," ...

  5. CSS实战2

    1. 鼠标样式 Cursor: pointer   鼠标变成小手 Cursor: default;   小白 Cursor : move;   移动 Cursor : text ;    文本输入 网 ...

  6. 菜鸟崛起 DB Chapter 1 数据库概述

    1. 数据库的概述 在目前阶段,如果要存储和管理数据,则离不开数据库.当数据存储到数据库后,就会通过数据库管理系统对这些数据进行组织和管理.数据库由一批数据构成有序的集合,这些数据被存放在结构化的数据 ...

  7. DOM操作指令整理

    DOM操作指令整理: (1) 创建新节点: createDocumentFragment() 创建一个DOM片段 creatElement() 创建一个具体的元素 creatTextNode() 创建 ...

  8. web常用软件

    编辑器: VSCode HBuilder WebStorm NotePad++ Eclipse Atom 常用插件: SwitchyOmega Vue-Tools server类: tomcat Ng ...

  9. Reverse a String-freecodecamp算法题目

    Reverse a String(翻转字符串) 题目要求: 把字符串转化成数组 借助数组的reverse方法翻转数组顺序 把数组转化成字符串 思路: 用.split('')将字符串转换成单个字母组成的 ...

  10. 小a和uim之大逃离(dp)

    题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从天空中打落下来,只见前方出现了一个 ...