`
water84222
  • 浏览: 375358 次
  • 性别: 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代码是一个生成验证码图像的程序,用于创建随机的、难以自动识别的字符序列,通常用于网站或应用程序的安全验证,防止机器人或自动化脚本进行恶意操作。验证码的主要目的是确保操作是由真实的人执行的,而...

    生成验证码图片的jsp代码

    在Web开发中,使用JSP(JavaServer Pages)来生成验证码图片是一种常见的方法。下面我们将详细讨论如何在JSP中实现验证码的生成。 首先,我们需要理解验证码的基本原理。验证码通常包含一串随机的字母和数字,有时...

    一个小的验证码图片生成程序

    7. **时间限制与唯一性**:验证码具有时效性,一旦生成,会在一段时间后失效,防止恶意用户反复尝试。同时,每个验证码只使用一次,增加安全性。 8. **用户验证**:用户输入的验证码字符串需要与服务器端保存的原始...

    生成验证码 jsp 图片验证码

    1. **随机生成验证码**:首先,我们需要创建一个函数,它能生成一个随机的字符串,长度通常为4-6位。这个字符串可以包含大小写字母和数字。可以使用Java的`Random`类和`StringBuilder`来实现。 2. **绘制图片**:...

    页面js生成验证码

    1. **随机数据生成**:首先,服务器或客户端的JavaScript会生成一段随机字符串,作为验证码的正确答案。这个字符串可以包含字母、数字,甚至符号,以增加识别难度。 2. **图像处理**:随机字符串会被转化为图像。这...

    javaWeb 生成验证码程序

    以上就是关于"JavaWeb生成验证码程序"的关键知识点,掌握了这些,你就可以创建一个基本的验证码生成系统,有效地保护你的Web应用免受恶意自动化攻击。当然,实际项目中还需要根据具体需求进行调整和优化,以达到最佳...

    java web笔记之servlet生成验证码

    2. 验证码的生命周期要管理好,确保一段时间后会话过期,避免被恶意用户利用。 3. 考虑使用更安全的验证码技术,如Google的reCAPTCHA,以提高安全性。 通过上述步骤,我们可以使用Servlet在Java Web应用中实现一个...

    易语言生成验证码图片源码

    【易语言生成验证码图片源码】是一个用于在易语言编程环境中创建验证码图片的源代码资源。易语言,全称为“易学易用编程语言”,是中国自主研发的一种简单易学的编程工具,旨在降低编程门槛,让普通用户也能进行软件...

    【纯前端】微信小程序验证码

    1. 图片验证码:服务器生成的验证码图片,通过wx.getImageInfo接口获取图片base64编码,然后在小程序中显示。 2. 滑动验证码或点击验证码:服务器返回的JSON数据包含验证码的初始状态和目标状态,利用小程序的canvas...

    登陆验证+servlet动态生成图片验证码

    在Servlet中生成图片验证码,首先需要创建一个Servlet类,该类将负责生成随机字符串并将其转化为图像。以下是一些关键步骤: 1. **生成随机字符串**:使用`java.util.Random`和`char[]`数组来创建一个指定长度的...

    随机生成验证码工具jar包

    这个“随机生成验证码工具jar包”是一个Java编写的程序库,它能够帮助开发者快速地在他们的应用中集成验证码功能。让我们深入了解一下这个jar包以及与之相关的Java和jar文件的知识。 首先,Java是一个广泛使用的...

    servlet生成验证码图片

    使用Java Servlet来生成验证码图片是一种常见的实现方式。本文将详细介绍如何通过servlet生成验证码图片,并解释其背后的技术原理。 #### 二、技术背景 1. **Servlet简介**: - Servlet是一种基于Java的技术,用于...

    图片验证码生成控件

    DLL文件允许多个应用程序共享同一段代码,从而节省内存并提高效率。在这个案例中,IdentifyingCode.dll很可能是实现验证码生成、显示和验证功能的模块,可能包括了随机字符串生成、字符扭曲、背景杂讯添加等图像...

    JSP生成彩色验证码程序

    本教程将深入讲解如何使用JSP来生成彩色的验证码程序。 一、验证码的基本原理 验证码的主要目的是通过要求用户输入图片上显示的一串随机字符,来验证用户是人而非机器。这些字符通常是扭曲的,以便增加机器识别的...

    最新JSP生成验证码

    1. **随机字符串生成**:验证码的核心是生成一段随机的字母或数字序列,通常为4到6位。在JSP中,可以使用`java.util.Random`类和`String`的`format`方法来创建这样的序列。 2. **图像创建**:为了使验证码难以被...

    Servlet生成动态验证码

    在Web应用程序中,验证码是一种常用的防止机器人或恶意用户自动操作的安全机制。Servlet生成动态验证码涉及到的主要知识点包括Servlet生命周期、HTTP请求响应流程、图像处理以及随机数生成。 1. Servlet生命周期: ...

    简单验证码生成jar包

    5. **安全存储和验证**:服务器需要安全地存储生成的验证码,以便在用户提交输入时进行验证,并在一段时间后删除以保证安全。 在实际开发中,验证码还需要考虑用户体验,比如生成的验证码应易于人类辨认但难于机器...

    java通过JCaptcha生成验证码

    Java 通过 JCaptcha 生成验证码是一项常见的安全技术,用于防止自动化程序(如机器人)非法访问或操作网站。验证码,全称“全自动区分计算机和人类的图灵测试”,是一种验证用户是否为人类的方法。在此,我们将深入...

    随机生成验证码

    此外,考虑到性能和用户体验,验证码的生命周期应适当设置,比如在一段时间无操作后自动过期。 5. **可用性和可访问性**:尽管验证码的主要目的是阻止自动化程序,但也要确保对人类用户友好。成语验证码可能会对非...

    JSP生成彩色验证码程序例子

    它通过显示一段随机生成的文字或数字,要求用户输入以验证其为真实的人类用户。在这个JSP程序中,我们可能会看到以下关键知识点: 1. **颜色处理**:彩色验证码通常会用多种颜色来增加机器识别的难度。在JSP中,...

Global site tag (gtag.js) - Google Analytics