zoukankan      html  css  js  c++  java
  • java验证码

    jsp页面====

    <tr>
    <td align="right"> </td>
    <td>
    <img class="verifyCode" onclick="changeCode()" src="getVerifyCode" style="height:35px;">
    </td>
    </tr>
    <tr>
    <td align="right"></td>
    <td><input class="verifyCode" name="verifyCode" placeholder="请输入验证码"> </td>
    </tr>

    /*初始化验证码*/
    $(function(){
    var src = "<%=basePath%>code/getVerifyCode?"+new Date().getTime(); //加时间戳,防止浏览器利用缓存
    $('.verifyCode').attr("src",src); //jQuery写法

    })
    /*点击刷新验证码*/
    function changeCode(){
    var src = "<%=basePath%>code/getVerifyCode?"+new Date().getTime(); //加时间戳,防止浏览器利用缓存
    $('.verifyCode').attr("src",src); //jQuery写法

    }

    后台代码=============

    package controller.user;

    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.io.OutputStream;

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

    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;

    import utile.VerifyCodeUtils;

    @Controller
    @RequestMapping("/code")
    public class VerifyCodeController {
    /* 获取验证码图片*/
    @RequestMapping("/getVerifyCode ")

    public void getVerificationCode(HttpServletResponse response,HttpServletRequest request) {

    try {
    int width=200;
    int height=69;
    BufferedImage verifyImg=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
    //生成对应宽高的初始图片
    String randomText = VerifyCodeUtils.drawRandomText(width,height,verifyImg);
    System.out.println("验证码内容randomText===="+randomText);
    //单独的一个类方法,出于代码复用考虑,进行了封装。
    //功能是生成验证码字符并加上噪点,干扰线,返回值为验证码字符
    request.getSession().setAttribute("verifyCode", randomText);
    response.setContentType("image/png");//必须设置响应内容类型为图片,否则前台不识别
    OutputStream os = response.getOutputStream(); //获取文件输出流
    ImageIO.write(verifyImg,"png",os);//输出图片流
    os.flush();
    os.close();//关闭流
    } catch (IOException e) {
    e.printStackTrace();

    }

    }


    }

    package utile;

    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.util.Random;
    /**
    * 验证码
    */
    public class VerifyCodeUtils{

    public static String drawRandomText(int width,int height,BufferedImage verifyImg) {
    Graphics2D graphics = (Graphics2D)verifyImg.getGraphics();
    graphics.setColor(Color.WHITE);//设置画笔颜色-验证码背景色
    graphics.fillRect(0, 0, width, height);//填充背景
    graphics.setFont(new Font("微软雅黑", Font.BOLD, 40));
    //数字和字母的组合
    String baseNumLetter= "123456789abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";
    StringBuffer sBuffer = new StringBuffer();
    int x = 10; //旋转原点的 x 坐标
    String ch = "";
    Random random = new Random();
    for(int i = 0;i <4;i++){
    graphics.setColor(getRandomColor());
    //设置字体旋转角度
    int degree = random.nextInt() % 30; //角度小于30度
    int dot = random.nextInt(baseNumLetter.length());
    ch = baseNumLetter.charAt(dot) + "";
    sBuffer.append(ch);
    //正向旋转
    graphics.rotate(degree * Math.PI / 180, x, 45);
    graphics.drawString(ch, x, 45);
    //反向旋转
    graphics.rotate(-degree * Math.PI / 180, x, 45);
    x += 48;
    }
    //画干扰线
    for (int i = 0; i <6; i++) {
    // 设置随机颜色
    graphics.setColor(getRandomColor());
    // 随机画线
    graphics.drawLine(random.nextInt(width), random.nextInt(height),
    random.nextInt(width), random.nextInt(height));
    }
    //添加噪点
    for(int i=0;i<30;i++){
    int x1 = random.nextInt(width);
    int y1 = random.nextInt(height);
    graphics.setColor(getRandomColor());
    graphics.fillRect(x1, y1, 2,2);
    }
    return sBuffer.toString();
    }

    /**
    * 随机取色
    */
    private static Color getRandomColor() {
    Random ran = new Random();
    Color color = new Color(ran.nextInt(256),
    ran.nextInt(256), ran.nextInt(256));
    return color;
    }

    }

  • 相关阅读:
    使用bootstrap和metroui设计的微网站或手机app界面
    利用Mahout实现在Hadoop上运行K-Means算法
    大连二手汽车培训网上线
    mysql数据库索引及事务demo
    根据xlsx模板生成excel数据文件发送邮件代码
    java多线程的3种写法
    java直接生成zip压缩文件精简代码(跳过txt文件)
    java生成zip压缩文件,解压缩文件
    java生成txt文件,读txt文件
    java递归算法提前返回值带出
  • 原文地址:https://www.cnblogs.com/xianz666/p/12006469.html
Copyright © 2011-2022 走看看