zoukankan      html  css  js  c++  java
  • 生成验证码的代码

    页面的点击事件:
    
    
    package action;
    
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.FontMetrics;
    import java.awt.Graphics2D;
    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.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import sun.font.FontDesignMetrics;
    
    /**
    * 验证码
    * 
    * @author Administrator
    * 
    */
    public class ValidateCode {
    
         // 验证码图片的宽度
         private int width = 70;
         // 验证码图片的高度
         private int height = 20;
         // 验证码字符个数
         private int codeCount = 5;
    
         char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
                   'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
                   'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
    
         /**
         * 页面上使用post提交时
         */
         public void validateCode(HttpServletRequest request,
                   HttpServletResponse response) throws ServletException, IOException {
              // 定义图像buffer
              BufferedImage buffImg = new BufferedImage(width, height,
                        BufferedImage.TYPE_INT_RGB);
              Graphics2D g = buffImg.createGraphics();
    
              // 创建一个随机数生成器类
              Random random = new Random();
    
              // 将图像填充为白色
              g.setColor(Color.WHITE);
              g.fillRect(0, 0, width, height);
    
              // 创建字体,字体的大小应该根据图片的高度来定。
              Font font = new Font("Fixedsys", Font.BOLD, 15);
              // 设置字体。
              g.setFont(font);
              // ★★★★获取字体的高度和宽度★★★★★
              FontMetrics fm = FontDesignMetrics.getMetrics(font);
              // 高度
              // System.out.println(fm.getHeight());
              // 单个字符宽度
              // System.out.println(fm.charWidth('A'));
              // 整个字符串的宽度
              // System.out.println(fm.stringWidth("ABC"));
    
              // 画边框。
              g.setColor(Color.BLACK);
              g.drawRect(0, 0, width - 1, height - 1);
    
              // 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。
              g.setColor(Color.BLACK);
              for (int i = 0; i < 80; i++) {
                   int x = random.nextInt(width);
                   int y = random.nextInt(height);
                   int xl = random.nextInt(1);
                   int yl = random.nextInt(1);
                   g.drawLine(x, y, x + xl, y + yl);
              }
    
              // randomCode用于保存随机产生的验证码,以便用户登录后进行验证。
              StringBuffer randomCode = new StringBuffer();
              int red = 0, green = 0, blue = 0;
    
              // 随机产生codeCount数字的验证码。
              int ww = 5;
              for (int i = 0; i < codeCount; i++) {
                   // 得到随机产生的验证码数字。
                   String strRand = String.valueOf(codeSequence[random.nextInt(36)]);
                   // 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
                   red = random.nextInt(255);
                   green = random.nextInt(100);
                   blue = random.nextInt(255);
    
                   // 用随机产生的颜色将验证码绘制到图像中。
                   g.setColor(new Color(red, green, blue));
                   g.drawString(strRand, ww, 15);
                   int fontW = fm.charWidth('W');// strRand.charAt(0)
                   ww += fontW;
                   // 将产生的四个随机数组合在一起。
                   randomCode.append(strRand);
              }
              // 将四位数字的验证码保存到Session中。
              HttpSession session = request.getSession();
              session.setAttribute("ValidateCode", randomCode.toString());
    
              // 禁止图像缓存。
              response.setHeader("Pragma", "no-cache");
              response.setHeader("Cache-Control", "no-cache");
              response.setDateHeader("Expires", 0);
              response.setContentType("image/jpeg");
    
              // 图片生效
              g.dispose();
              // 将图像输出到Servlet输出流中。
              ImageIO.write(buffImg, "jpeg", response.getOutputStream());
         }
    
    
    
    }


    这个代码是参考别人的,以后有需要的话就可以直接查看这个资料。


  • 相关阅读:
    c# 大白话告诉你Thread的Sleep和Join的区别
    c# winform richtextbox控制每行颜色 + 滚动条始终滚动到最底部
    c# winform禁止窗口多开
    winform窗口关闭,进程没有关掉的解决办法
    System.Threading.Timer定时器使用注意事项
    c# socket 心跳 重连
    javascript 从对象数组中 按字段/属性取最大值或最小值
    codesmith设置mysql的连接字符串
    .net桌面程序或者控制台程序使用NLog时的注意事项
    vue获取不到后端返回的响应头
  • 原文地址:https://www.cnblogs.com/murong/p/4969496.html
Copyright © 2011-2022 走看看