生成验证码的代码

页面的点击事件:

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

}

这个代码是参考别人的,以后有需要的话就可以直接查看这个资料。
时间: 2024-10-06 01:20:43

生成验证码的代码的相关文章

转 一个简单实用的 生成验证码的 代码

1 using System; 2 using System.Collections.Generic; 3 using System.Drawing; 4 using System.Drawing.Drawing2D; 5 using System.Drawing.Imaging; 6 using System.IO; 7 using System.Linq; 8 using System.Web; 9 10 11 public class ValidateCode 12 { 13 public

jsp动态生成验证码详细代码

思路:页面加载时执行fnGetcode()方法,获取验证码所有信息:点击“点击图片更换” 再次执行fnGetcode()方法: 1):<body > <label>         验证码:         <input id="showco" type="hidden" value=""/>         <input type="text" id="code"

django生成验证码

验证码生成依赖于PIL库. 生成验证码的代码如下: def captcha(request): width = 100 height = 40 bg_color = (255, 255, 255) image = Image.new('RGB', (width, height), bg_color) font = ImageFont.truetype('Arial.ttf', 30) font_color = (0, 0, 0) draw = ImageDraw.Draw(image) capt

asp.net中ashx生成验证码代码放在Linux(centos)主机上访问时无法显示问题

最近有个项目加入了验证码功能,就从自己博客以前的代码中找到直接使用,直接访问验证码页面报错如下: 源代码:asp.net中使用一般处理程序生成验证码 Application Exception System.ArgumentException The requested FontFamily could not be found [GDI+ status: FontFamilyNotFound] Description: HTTP 500.Error processing request. De

三条代码 搞定 python 生成验证码

C:\Users\DELL>python Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import qrc

生成验证码效果

生成验证码效果    ValidateCode.java 验证码生成类 Java代码   package cn.dsna.util.images; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.FileOutputStream; import java.io.IOException; impor

用PHP生成验证码

初学web,正在尝试写一个博客,注册的时候需要用的验证码.我所学的书Head First中有关于验证码的代码,改了下中文注释,先贴上 <?php session_start(); //定义重要的常量 define('CAPTCHA_NUMCHARS',6); define('CAPTCHA_WIDTH',100); define('CAPTCHA_HEIGHT',25); //生成短语 $pass_phrase=""; for($i=0;$i<CAPTCHA_NUMCHAR

asp.net一般处理程序(.ashx)动态生成验证码案例。

{使用一般处理程序动态生成验证码} 1.新建WebSite项目,添加一般处理程序命名为  yzm.ashx,添加如下代码: public void ProcessRequest(HttpContext context)    {   //将context.Response.ContentType = "text/plain";修改为context.Response.ContentType = "image/JPEG";        context.Response

用python生成验证码图片

除了配置好的python环境外,还需要配有python中的PIL库,这是python中专门用来处理图片的库.用传统的pip install 方法或者下载源码 python setup.py install 方法安装该库,很可能会报错(视运行环境不同).可以采用以下方法: 1.下载安装包URL:http://www.pythonware.com/products/pil/index.htm,要下载支持全平台的. 2.解压缩: tar –zxv –f Imaging-1.1.7.tar.gz 3.进