`

java实现图片验证码

阅读更多
java实现图片验证码
ImageGenerator 生成一张包含四位随机数的图片
Java代码
package com.my.page;  
 
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;  
 
/** 
* 这个class主要实现随机生成一个4位数的验证码,并写入session, 
*/ 
 
public class ImageGenerator extends HttpServlet {  
      
      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 = 75, 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 < 19; 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) {  
 
        }  
    }  
 


package com.my.page;

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;

/**
* 这个class主要实现随机生成一个4位数的验证码,并写入session,
*/

public class ImageGenerator extends HttpServlet {

  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 = 75, 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 < 19; 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加入一下内容
Java代码
<servlet>  
    <servlet-name>imageGenerator</servlet-name>  
<servlet-class>com.my.page.ImageGenerator</servlet-class>  
</servlet>  
  <servlet-mapping>  
    <servlet-name>imageGenerator</servlet-name>  
    <url-pattern>/image.jpg</url-pattern>  
</servlet-mapping> 

<servlet>
  <servlet-name>imageGenerator</servlet-name>
<servlet-class>com.my.page.ImageGenerator</servlet-class>
  </servlet>
   <servlet-mapping>
  <servlet-name>imageGenerator</servlet-name>
  <url-pattern>/image.jpg</url-pattern>
  </servlet-mapping>


运用
Java代码
<input type="text" class="txt" wicket:id="validate"/><br/>  
<img src="image.jpg" onclick= "this.src= 'image.jpg? '+(new   Date()) "/> 
其中onclick事件作用是:单击该验证图片,进行刷新,实现看不清换一张的效果
分享到:
评论

相关推荐

    java实现滑动验证码

    java实现滑动验证码

    Java实现的图片验证码

    总结来说,Java实现图片验证码的关键在于生成随机字符串、图像处理和用户验证。通过合理的算法设计和图像操作,可以创建出既安全又易于人类辨认的验证码系统。在实际项目中,开发者可以根据需求调整验证码的复杂度和...

    JAVA实现随机图片验证码简单方法

    JAVA实现随机图片验证码简单方法.rtf

    Java实现点击文字验证码与拖动/滑动图片验证码(源码+demo+单元测试+实现思路)

    1.部署步骤 1.1 100%可生产使用. 1.2 导入到idea时候选择maven项目 1.3 修改demo里面子项目resources/application.yml的redis... 4.2拖动图片验证码:https://blog.csdn.net/m0_38138879/article/details/117559456

    java识别图片验证码的2种方式

    包含5个识别图片验证码的类,分别对应不同5种不同的验证码 其中用了两种不同的实现方式(截取采样像素比对+Tesseract-OCR识别) 附带一个图像指纹类(判定图片相似度)和一个寻找联通线的类(八皇后算法实现)

    java生成图片验证码

    描述中同样强调了"java生成图片验证码",这意味着我们将专注于Java实现的具体步骤和技术。 标签"java servlet"表明我们将在Servlet环境下进行操作。Servlet是Java EE(现在称为Jakarta EE)的一部分,主要用于开发...

    java实现拖拉验证码工具类

    实现功能:传入路径,返回base64图片编码(原图抠图及滑块图)、图片坐标值、唯一id; 使用方法:1、将jar包导入项目中; 2、调用工具类 ImageVo imageVo = GraphicCodeUtil.generate("E:\\data\\3322.jpg",width,...

    Java实现图片验证码具体代码

    Java 实现图片验证码涉及到多个关键知识点,包括图像处理、HTTP响应、随机数生成以及前端页面交互。下面将详细讲解这些内容: 1. **图像处理**: - `BufferedImage` 类是 Java 中用于处理图像的基本类,它可以创建...

    java-图片验证码.zip

    这个"java-图片验证码.zip"压缩包包含了一个实现Java图片验证码功能的工具类(VerifyUtil.java)和一个具体的控制器(AppPicCodeController.java),用于处理验证码的生成与验证。 首先,我们来详细了解一下`...

    Java实现验证码具体代码(图片、汉字)

    本文将详细讲解如何使用Java实现图片验证码和汉字验证码。 首先,我们来看第一个实例,它展示了如何生成随机的字母数字组合的图片验证码。这个例子中,主要用到了以下Java类和方法: 1. `java.awt.Color`:用于...

    java-验证码识别-验证码破解

    Java作为广泛应用的编程语言,也提供了多种方法来实现验证码识别。在这个“java-验证码识别-验证码破解”的主题中,我们将深入探讨如何使用Java进行验证码识别,特别是通过Tess4J库进行OCR(光学字符识别)。 ...

    java 生成图片验证码

    在IT领域,验证码(CAPTCHA)是一...在提供的压缩包文件“图片验证码生成”中,可能包含了实现上述功能的源代码示例,你可以通过学习和理解这些代码,加深对Java生成图片验证码的理解,并根据实际需求进行调整和优化。

    实现验证码功能

    通常情况下,验证码通过让用户识别并输入一张图片中的字符来实现这一目标。由于目前的人工智能技术还难以精确地识别复杂背景下的文字,因此这是一种有效的方法来区分人机。 #### 验证码的实现步骤 1. **生成随机...

    验证码破解的方法,简单验证码破解java示例

    本篇文章将详细讨论验证码的基本原理,以及如何使用Java实现简单的验证码破解方法。请注意,了解验证码破解知识主要是为了提高网站安全意识,避免自身系统被攻击,而不是用于恶意破解他人系统。 验证码的类型主要有...

    Java生成图片验证码

    在本主题中,我们将深入探讨如何使用Java来生成图片验证码。Java生成图片验证码的过程涉及图像处理、随机数生成以及字符串编码等多个知识点。 首先,验证码的核心是生成一个随机的字符串,通常包含字母和数字。在...

    java-滑动验证码实现

    springboot框架实现滑动验证码,下载后可直接运行,http://localhost:8899/index.html启动后直接访问验证,工具方法可以直接拿出使用与自身项目代码结合使用,本人前端能力有限,只实现基本的滑动验证,关于其他效果...

    java实现动态验证码的效果

    Java 实现动态验证码效果是一种常见的安全机制,用于防止自动化脚本或机器人在网站上进行恶意操作,如批量注册、登录等。在这个过程中,我们将探讨如何使用Java语言来创建一个简单的动态验证码系统,主要包括以下几...

    java实现的简单验证码

    用java实现的简单验证码程序,仅仅实现了随机文字,而且只是数字,未加入背景图片和干扰线

    java图片滑动验证码

    在Java中实现图片滑动验证码涉及以下几个核心知识点: 1. **图像处理**:首先,你需要了解Java的图像处理库,如Java AWT和Swing中的`BufferedImage`类。这些库允许你加载、创建、修改和保存图像。在滑动验证码中,...

Global site tag (gtag.js) - Google Analytics