`

动态验证码的生成

阅读更多
package com.javaee.servlet;

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

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

/**
* 动态验证码的生成
*
* @author George
*
*/
public class ImageServlet extends HttpServlet {

    public 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);
    }

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        // 在内存中创建图象
        int width = 60, 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.PLAIN, 18));

        // 画边框
        // g.setColor(new Color());
        // g.drawRect(0,0,width-1,height-1);

        // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
        g.setColor(getRandColor(160, 200));
        for (int i = 0; i < 155; 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);
        }

        // 取随机产生的认证码(4位数字)
        String sRand = "";
        for (int i = 0; i < 4; i++) {
            String rand = String.valueOf(random.nextInt(10));
            sRand += rand;
            // 将认证码显示到图象中
            g.setColor(new Color(20 + random.nextInt(110), 20 + random
                    .nextInt(110), 20 + random.nextInt(110))); // 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
            g.drawString(rand, 13 * i + 6, 16);
        }

        // 将认证码存入SESSION
//        session.setAttribute("rand", sRand);

        // 图象生效
        g.dispose();

        // 输出图象到页面
        ImageIO.write(image, "JPEG", response.getOutputStream());
       
    }

    protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(arg0, arg1);
    }

}
分享到:
评论

相关推荐

    Python实战:团队激励与沟通之动态验证码生成源码

    项目概述:动态验证码生成源码,旨在提升团队激励与沟通效率。 核心技术:本项目主要采用Python语言进行开发,同时结合HTML和CSS技术,实现了一套功能完善的动态验证码生成系统。 文件结构:项目包含65个文件,...

    基于PHP的中文GIF动态验证码生成器的设计与实现 (1).pdf

    基于 PHP 的中文 GIF 动态验证码生成器的设计与实现 本文介绍了基于 PHP 的中文 GIF 动态验证码生成器的设计与实现,旨在解决当前验证码生成器安全性较弱的问题。文章首先介绍了验证码的概念和当前验证码生成器的...

    afl动态验证码生成器

    动态验证码生成器 可生成4位或6位验证码 即可纯数字,也可中英混合。 可用于邮件验证时等的动态验证码。 动态验证码未有有效时间,需要此功能,请另写个线程监测验证码发出失效,若超过时间可释放验证码储存变量。 ...

    Java实现动态验证码生成

    Java实现动态验证码生成

    Servlet仿CSDN动态验证码的生成-带数字和字母

    本文主要探讨如何使用Servlet技术来模仿CSDN网站的动态验证码生成过程,其中包括数字和字母的组合,以及加减乘三种运算的实现。 首先,我们要理解Servlet的原理。Servlet是Java EE中的一种服务器端组件,用于扩展...

    Servlet生成动态验证码

    要生成动态验证码,首先需要在Servlet中创建一个`BufferedImage`对象,定义验证码的宽度和高度。然后,通过随机数生成器填充图像,可以绘制不同颜色的线条和字符,增加识别难度。使用`Random`类生成随机字符序列,...

    动态验证码教程与实例

    在项目实例中,你可以找到一个完整的动态验证码生成器,它可能包含以下文件: - `config.php`: 配置文件,定义验证码的参数,如长度、字体、颜色等。 - `captcha.php`: 主要的验证码生成脚本,包含了上述的生成逻辑...

    C#生成Gif动态验证码(源代码)

    通过阅读并理解`Example`中的代码,可以学习如何整合这些工具,创建出自己的动态验证码生成服务。 总的来说,生成C#的GIF动态验证码是一项结合了图像处理、动画和安全策略的技术任务。通过掌握这些技术,开发者可以...

    java 生成动态gif 验证码

    在Java开发中,生成动态GIF验证码是一种常见的安全机制,用于防止自动机器人或者恶意脚本对网站进行非法操作。这种验证码通常包含随机生成的字母、数字或者符号,以动画的形式展示,用户需要输入看到的验证码才能...

    C#生成动态验证码

    总的来说,生成动态验证码是提高Web应用安全性的重要手段。通过合理设计验证码的生成和验证逻辑,以及使用C#提供的强大工具,我们可以在保护用户账户安全的同时,提供良好的用户体验。对于开发者而言,掌握这一技术...

    jsp生成动态验证码

    jsp生成动态验证码,jsp生成动态验证码。

    验证码生成工具类

    验证码生成工具类是一种在Web应用中广泛使用的安全机制,它主要用于防止自动化的恶意操作,比如机器人注册、垃圾邮件发送等。这个工具类是用Java语言编写的,因此我们可以深入探讨一下Java验证码生成的相关技术和...

    验证码生成类大全

    - JavaScript中,可以结合Canvas元素生成动态验证码,或者利用WebGL实现更复杂的3D验证码。 4. **验证码服务端与客户端交互**: - 生成验证码时,服务器端创建一个唯一的验证码值,并将其存储在会话(Session)中...

    验证码动态生成代码

    验证码是一种用于验证用户身份的安全机制,它通常由一组随机生成的字符或数字组成,...通过`getImg.java`和`getImg.jsp`这两个文件,我们可以实现一套完整的动态验证码生成和验证系统,为Web应用提供基础的安全保障。

    用servlet实现动态的生成验证码,点击验证码改变,及验证码的校验

    二、动态验证码生成 1. **生成随机字符串**:首先,我们需要创建一个随机的字符串作为验证码。通常这个字符串包含字母和数字,长度可以自定,比如4位。我们可以利用Java的`Random`类和`StringBuilder`生成这个字符串...

    基于jsp的验证码自动生成

    JSP是Java的一种动态网页技术,它允许开发者在HTML或XML文档中嵌入Java代码,以便在服务器端处理数据并生成动态内容。在JSP中,我们可以通过使用脚本元素、指令和标签库来编写业务逻辑和展示层代码。 生成验证码的...

    VC++验证码生成Base64验证码png图片程序

    VC++验证码生成Base64验证码png图片程序,如何使用VC++生成验证码图片,输出Base64图片给网页调用

    基于Python的动态验证码.zip

    这个资料包为初学者提供了一个实践动态验证码生成的完整平台,通过学习和运行这些源码,可以深入了解Python图像处理、随机数生成、服务器交互等多个方面的重要技能,对于提升计算机大作业或毕业设计的实践能力具有很...

    图片验证码生成demo

    这个"图片验证码生成demo"是一个示例项目,用于演示如何创建这样的验证码系统。在本文中,我们将深入探讨验证码的工作原理,以及如何使用编程技术来实现一个图片验证码生成器。 验证码的主要目标是防止自动化程序...

    ASP.NET动态验证码

    在这个例子中,我们将深入探讨ASP.NET如何实现动态验证码的生成与验证。 首先,我们需要创建一个验证码类,这个类将负责生成随机的字符串和对应的图像。在.NET框架中,我们可以利用`Random`类生成随机数字,然后将...

Global site tag (gtag.js) - Google Analytics