你的位置:首页 > Java教程

[Java教程]java生成验证码


都是基础知识,就不说废话了,直接上例子.

大家都能看懂的.

package com.gys;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.util.Random;import javax.imageio.ImageIO;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class MakeCode {  private Random random = new Random();  private String randString = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//随机产生的字符串    private int width = 80;//图片宽  private int height = 26;//图片高  private int lineSize = 40;//干扰线数量  private int stringNum = 4;//随机产生字符数量  /*   * 获得字体   */  private Font getFont(){    return new Font("Fixedsys",Font.CENTER_BASELINE,18);  }  /*   * 获得颜色   */  private Color getRandColor(int fc,int bc){    if(fc > 255)      fc = 255;    if(bc > 255)      bc = 255;    int r = fc + random.nextInt(bc-fc-16);    int g = fc + random.nextInt(bc-fc-14);    int b = fc + random.nextInt(bc-fc-18);    return new Color(r,g,b);  }  /**   * 生成随机图片   */  public void getRandcode(HttpServletRequest request,      HttpServletResponse response) {    HttpSession session = request.getSession();    //BufferedImage类是具有缓冲区的Image类,Image类是用于描述图像信息的类    BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR);    Graphics g = image.getGraphics();//产生Image对象的Graphics对象,该对象可以在图像上进行各种绘制操作    g.fillRect(0, 0, width, height);    g.setFont(new Font("Times New Roman",Font.ROMAN_BASELINE,18));    g.setColor(getRandColor(110, 133));    //绘制干扰线    for(int i=0;i<=lineSize;i++){      drowLine(g);    }    //绘制随机字符    String randomString = "";    for(int i=1;i<=stringNum;i++){      randomString=drowString(g,randomString,i);    }    session.removeAttribute("code");    session.setAttribute("code", randomString);    System.out.println(randomString);    g.dispose();    try {      ImageIO.write(image, "JPEG", response.getOutputStream());//将内存中的图片通过流动形式输出到客户端    } catch (Exception e) {      e.printStackTrace();    }  }  /*   * 绘制字符串   */  private String drowString(Graphics g,String randomString,int i){    g.setFont(getFont());    g.setColor(new Color(random.nextInt(101),random.nextInt(111),random.nextInt(121)));    String rand = String.valueOf(getRandomString(random.nextInt(randString.length())));    randomString +=rand;    g.translate(random.nextInt(3), random.nextInt(3));    g.drawString(rand, 13*i, 16);    return randomString;  }  /*   * 绘制干扰线   */  private void drowLine(Graphics g){    int x = random.nextInt(width);    int y = random.nextInt(height);    int xl = random.nextInt(13);    int yl = random.nextInt(15);    g.drawLine(x, y, x+xl, y+yl);  }  /*   * 获取随机的字符   */  public String getRandomString(int num){    return String.valueOf(randString.charAt(num));  }}

package com.gys;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class GetCodeServlet extends HttpServlet {  private static final long serialVersionUID = 1L;  public void doGet(HttpServletRequest request, HttpServletResponse response)      throws ServletException, IOException {    response.setContentType("image/jpeg");//设置相应类型,告诉浏览器输出的内容为图片    response.setHeader("Pragma", "No-cache");//设置响应头信息,告诉浏览器不要缓存此内容    response.setHeader("Cache-Control", "no-cache");    response.setDateHeader("Expire", 0);    MakeCode makeCode = new MakeCode();    try {      makeCode.getRandcode(request, response);//输出图片方法    } catch (Exception e) {      e.printStackTrace();    }  }  public void doPost(HttpServletRequest request, HttpServletResponse response)      throws ServletException, IOException {    doGet(request, response);  }}

<??><web-app version="2.4" ="http://java.sun.com/  ="http://www.w3.org/2001/  xsi:schemaLocation="http://java.sun.com/>  <servlet>    <servlet-name>GetCodeServlet</servlet-name>    <servlet-class>com.gys.GetCodeServlet</servlet-class>  </servlet>  <servlet-mapping>    <servlet-name>GetCodeServlet</servlet-name>    <url-pattern>/getCode</url-pattern>  </servlet-mapping>    <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>

index.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head>  <base href="<%=basePath%>">    <title>验证码</title>   <script type="text/javascript">    function getCode(obj) {      obj.src = "imageServlet?"+Math.random();//防止出现缓存    }  </script> </head>  <body>    <img title="点击更换" onclick="getCode(this);" src="getCode"><br/> </body></html>

跑起来: