`
water84222
  • 浏览: 369738 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

一段生成验证码图片的程序

阅读更多
package test;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.OutputStream;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class ImageGenerator extends HttpServlet {
  /** *//**
   *
   */
  private static final long serialVersionUID = -3938318741402322164L;

  private static Color getRandColor(int fc, int bc) {
    Random random = new Random();
    if (fc > 255)
      fc = 255;
    if (bc > 255)
      bc = 255;
    int r = fc + random.nextInt(bc - fc);
    int g = fc + random.nextInt(bc - fc);
    int b = fc + random.nextInt(bc - fc);
    return new Color(r, g, b);
  }

  private static String charsLong = "23456789abcdefghjklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ";

  private static String charsShort = "0123456789";

  private static String chars = charsLong;

  @Override
  public void doGet(HttpServletRequest request, HttpServletResponse response) {
    try {
      int charsLength = chars.length();

      response.setHeader("Pragma", "No-cache");
      response.setHeader("Cache-Control", "no-cache");
      response.setDateHeader("Expires", 0);

      int width = 70, height = 20;
      BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

      Graphics g = image.getGraphics();

      Random random = new Random();

      g.setColor(getRandColor(200, 250));
      g.fillRect(0, 0, width, height);

      g.setFont(new Font("Times New Roman", Font.ITALIC, height));

      g.setColor(getRandColor(160, 200));
      for (int i = 0; i < 35; i++) {
        int x = random.nextInt(width);
        int y = random.nextInt(height);
        int xl = random.nextInt(12);
        int yl = random.nextInt(12);
        g.drawLine(x, y, x + xl, y + yl);
      }

      StringBuilder sRand = new StringBuilder();
      String[] fontNames = { "Times New Roman", "Arial", "Book antiqua", "" };

      for (int i = 0; i < 4; i++) {
        g.setFont(new Font(fontNames[random.nextInt(3)], Font.ITALIC, height));
        char rand = chars.charAt(random.nextInt(charsLength));
        sRand.append(rand);

        g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
        g.drawString(String.valueOf(rand), 16 * i + random.nextInt(6) + 3, height - random.nextInt(4));
      }

      g.setColor(getRandColor(160, 200));
      for (int i = 0; i < 30; i++) {
        int x = random.nextInt(width);
        int y = random.nextInt(height);
        int xl = random.nextInt(width);
        int yl = random.nextInt(width);
        g.drawLine(x, y, x + xl, y + yl);
      }

      request.getSession().setAttribute("Login_Image_Code", sRand.toString());

      g.dispose();

      try {
        Thread.sleep(100);
      } catch (Exception ex) {
      }
      OutputStream os = response.getOutputStream();
      ImageIO.write(image, "JPEG", os);
      os.flush();
      os.close();
    } catch (Exception ex) {

    }
  }
}



修改 web.xml

<servlet>
        <servlet-name>imageGenerator</servlet-name>
        <servlet-class>test.ImageGenerator</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>imageGenerator</servlet-name>
        <url-pattern>/image.jsp</url-pattern>
    </servlet-mapping>
分享到:
评论

相关推荐

    JAVA一段生成验证码图片的程序

    JAVA一段生成验证码图片的程序 JAVA一段生成验证码图片的程序 JAVA一段生成验证码图片的程序 JAVA一段生成验证码图片的程序

    采用ajax实现的图片验证码

    验证码信息为图片。每一行代码均有注释,通俗易懂。 实现步骤: 1、创建web工程 2、在jsp页面,编写一个请求servlet的名称"&gt; 3、编写一个servlet,在servlet中产生图形验证码 -----------------------------------...

    易语言-易语言内存生成验证码

    上次发了一个易语言内存生成验证码的源码,后来压力测试的时候发现多线程下程序会崩溃。原因是 GDI 在多线程创建hDC的时候,经常会失败,内存hDC只有一个工作区域,导致多线程冲突 所以后来研究了一段时间发现,多...

    验证码 ASP 任意长度 源码

    用于生成验证码 可以生成任意长度的随机验证码 主要就是一段源代码 可以直接加载到程序中,只需在页面加一个iamge 欢迎下载使用

    C#程序开发范例宝典(第2版).part08

    一部久享盛誉的程序开发宝典。精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后...

    程序天下:JavaScript实例自学手册

    16.17 JavaScript生成验证码(二) 第17章 进度条、滚动条特效处理 17.1 使用符号制作的进度条 17.2 用table制作的进度条 17.3 CSS+JS制作的进度条(一) 17.4 CSS+JS制作的进度条(二) 17.5 进度条形式的下载效果 ...

    C#程序开发范例宝典(第2版).part12

    一部久享盛誉的程序开发宝典。精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后...

    《程序天下:JavaScript实例自学手册》光盘源码

    16.17 JavaScript生成验证码(二) 第17章 进度条、滚动条特效处理 17.1 使用符号制作的进度条 17.2 用table制作的进度条 17.3 CSS+JS制作的进度条(一) 17.4 CSS+JS制作的进度条(二) 17.5 进度条形式的下载效果 ...

    java开源包5

    Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...

    网趣网上购物系统的部分特点与精华

    网趣网上购物系统率先支持商品图片水印设置功能,可以选择设置图片水印或文字水印,并可设置水印嵌入图片的位置,设置水印可以有效防止图片盗链,同时不易被修改和使用,更能表现出一个网站的特色风格,设置好水印...

    网趣网上购物系统时尚版

    网趣网上购物系统率先支持商品图片水印设置功能,可以选择设置图片水印或文字水印,并可设置水印嵌入图片的位置,设置水印可以有效防止图片盗链,同时不易被修改和使用,更能表现出一个网站的特色风格,设置好水印...

    网趣网上购物系统时尚版 V9.0

    网趣网上购物系统率先支持商品图片水印设置功能,设置图片水印可以有效防止图片盗链,同时不易被修改和使用,更能表现出一个网站的特色风格,设置好水印后,添加商品上传图片时,会自动在图片上嵌入水印内容,彰显...

    JAVA上百实例源码以及开源项目

     这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 ...

    网趣网上购物系统HTML静态版v2012版

    同时还增加ID段生成功能,根据商品起始ID进行生成静态,非常方便! 五、独特的静态生成与强大的SEO优化于一体! 事实证明,HTML静态文件快速被搜索引擎收录,网趣HTML静态版V2012在采用先进的AJAX与XML技术生成的...

    C#程序开发范例宝典(第2版).part13

    一部久享盛誉的程序开发宝典。精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后...

    C#程序开发范例宝典(第2版).part02

    一部久享盛誉的程序开发宝典。精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后...

Global site tag (gtag.js) - Google Analytics