`

验证码 的生成类

阅读更多
<input type="text" maxlength="4" tabindex="3" class="ipt_tt ipt_random" name="authorcode" id="authorcode"/>
<img id="randomCodeImg" src="getAuthcode.do"  onclick="this.src='getAuthcode.do?id=' + Math.random()" style="vertical-align: middle;"  alt="验证码" title="如果看不清楚,请点图片重新生成" />


package com.s.controller;

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

import com.s.controller.BaseController;

import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class AuthcodeController extends BaseController {

static final long serialVersionUID = 19881218;  //明明的生日
   
  
  @RequestMapping("/getAuthcode.do")
   public void getAuthcode(HttpServletRequest request,HttpServletResponse response) throws IOException{
      
    response.setContentType("image/jpeg");
        response.setHeader("Pragma","No-cache");
        response.setHeader("Cache-Control","no-cache");
        response.setDateHeader("Expires", 0);
        // 在内存中创建图象
        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(new Color(255,255,255));
        g.fillRect(0, 0, width, height);


        //设定字体
        g.setFont(new Font("Comic Sans MS",Font.PLAIN,18));
        //画边框
        g.setColor(this.getRndColor());
        //  g.drawRect(0,0,width-1,height-1);

        // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
        g.setColor(this.getRndColor());
        for (int i=0;i<10;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(127,127,127));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
            g.drawString(rand,13*i+6,16);
        }
        request.getSession().setAttribute("acode",sRand);
        // 图象生效
        g.dispose();
        ServletOutputStream responseOutputStream =response.getOutputStream();
        // 输出图象到页面
        ImageIO.write(image, "JPEG", responseOutputStream);

        //以下关闭输入流!
        responseOutputStream.flush();
        responseOutputStream.close();
    }

// 检查验证码正不正确
@RequestMapping("/isokAuthcode.do")
public void isokAuthcode(){

}
 
private  Color getRndColor(){//给定范围获得随机颜色
        return new Color(this.rnd(),this.rnd(),this.rnd());
    }
  
 
/**随机生成0-255的数字**/
    private int rnd(){
        java.util.Random random = new java.util.Random();
        return random.nextInt(255);
    }
/**把除了大小写字母和数字外的字符全过滤掉**/
    private char filter(int k){
        if(k<65)k=48+(k%10);
        if(k>64&&k<96)k=65+(k%26);
        if(k>96)k=97+(k%26);
        return (char)k;
    }
/**取得一个随机字体**/
    private String getRndFontNames(){
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        String[] k = ge.getAvailableFontFamilyNames();
        java.util.Random r = new java.util.Random();
        return k[r.nextInt(k.length)];
    }


}
分享到:
评论

相关推荐

    验证码生成类大全

    验证码生成类大全是一种用于网络安全验证的重要工具,它主要用于防止恶意自动化程序(如机器人)进行非法操作,例如批量注册、刷票或数据抓取。在Web应用中,验证码通常需要用户在提交表单前输入图像上显示的一串...

    验证码生成类-最好用的

    验证码生成类是IT领域中一个重要的安全机制,主要用于防止恶意自动化程序或机器人对网站或应用程序进行非法操作。在本文中,我们将深入探讨验证码生成类的相关知识点,并基于提供的文件信息进行详细解析。 首先,...

    java验证码生成类

    在Java中,我们可以创建一个自定义的验证码生成类来实现这一功能。这篇博客文章“java验证码生成类”提供了一个简单的示例,下面我们将深入探讨验证码生成的相关知识点。 首先,验证码的基本原理是生成一段随机的、...

    一个php验证码生成类代码.zip

    这个“一个php验证码生成类代码.zip”压缩包中包含了一个PHP验证码生成类,它能够帮助开发者轻松地创建具有背景、干扰元素和随机文本的图像验证码。 验证码类通常包括以下几个核心功能: 1. **生成随机字符串**:...

    php高安全验证码生成类

    对于这个验证码生成类,readme.md可能会详细解释如何配置字体目录、如何引入类文件、示例代码以及可能出现的问题和解决方案。 通过以上方法,我们可以构建一个具有较高安全性的PHP验证码生成类,有效防止自动化攻击...

    php验证码生成类.zip

    php验证码生成类

    asp.net验证码生成类

    ASP.NET验证码生成类主要用于在Web应用中创建安全的随机字符序列,用于验证用户输入是否有效,防止自动机器人或恶意程序的攻击。此类通常包括几个关键功能,如生成验证码字符串、创建验证码图片以及处理相关的安全...

    验证码生成类

    验证码生成类是IT领域中常见的安全机制,主要目的是防止恶意自动化程序(如机器人或爬虫)对网站进行非法操作,如注册、登录或提交表单等。验证码通过生成难以自动识别的图像,要求用户手动输入图像上显示的文字或...

    验证码生成类(支持汉字、数字+字母)

    本文将详细解析一个支持汉字、数字+字母的验证码生成类的实现,以及其在实际项目中的应用。 验证码生成的核心在于随机性和不可预测性。在这个类中,我们可以看到它提供了两种模式:汉字模式和数字+字母模式。这两种...

    一个php验证码生成类代码

    下面将详细介绍这个PHP验证码生成类的工作原理和关键知识点。 首先,验证码类通常会包含以下几个核心部分: 1. **图像初始化**:在PHP中,可以使用`imagecreatetruecolor()`函数创建一个新的真彩色图像资源,指定...

    WinForm验证码生成类

    WinForm中验证码生成类可以生成随机数和图片对初学者有很大的用处

    .NET验证码生成类 源代码

    在.NET框架中,我们可以自定义验证码生成类来实现这一功能。以下是对".NET验证码生成类 源代码"的详细解释。 验证码生成通常包括以下几个关键步骤: 1. **随机字符生成**: - 首先,我们需要生成一组随机的字符...

    验证码生成工具类

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

    java web 登录验证码生成类

    生成验证码图片 java类中获得验证码的方法: session.getAttribute("checkcode"); jsp页面中显示图片的方式: ${pageContext.request.contextPath}/checkcode.jsp"/&gt; 另外在web.xml中配置验证码类的加载: ...

    图片验证码生成类

    图片验证码的生成类 使用于asp.net core 版本的项目中

    验证码随机生成数字类

    在"ValidateCode"这个文件中,很可能是实现了以上步骤的一个验证码生成类。通过理解和使用这个类,开发者可以快速集成安全的随机数字验证码到自己的应用程序中,增强系统的安全性。 总的来说,验证码随机生成数字类...

Global site tag (gtag.js) - Google Analytics