现在几乎所有的网站或者系统都要求输入验证码,请问下都有什么方法可以实现此功能呢?自己是初学,水平有限,对此很疑惑,还请高手指教。谢谢!

解决方案 »

  1.   

    这种资源应该有很多o.!如果你要 发mail过来。[email protected]
      

  2.   

    一个img定位到servlet中,servlet输出就行了。
      

  3.   

    img.jsp这个是生成验证码的。文件
    <%@ page contentType="image/jpeg"
    import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"
    pageEncoding="GB2312"%>
    <%!//给定范围获得随机颜色
    Color getRandColor(int fc, int bc) {
    Random random = new Random();
    if (fc > 255)
    fc = 255;
    if (bc > 255)
    bc = 255;
    int r = fc + random.nextInt(bc - fc);
    int g = fc + random.nextInt(bc - fc);
    int b = fc + random.nextInt(bc - fc);
    return new Color(r, g, b);
    }%>
    <%
    //声明字符串型的arrNumber用于保存产生随机数的数字,其中包括26个英文字母(大写小写)和0-9的数字
    String arrNumber = "0123456789";
    //设置页面不缓存
    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(getRandColor(200, 250));
    g.fillRect(0, 0, width, height);
    //设定字体
    g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
    // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
    g.setColor(getRandColor(160, 200));
    for (int i = 0; i < 155; 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++){ 
         int rand=random.nextInt(10); 
         sRand+=String.valueOf(arrNumber.charAt(rand));  // 将认证码显示到图象中
    g.setColor(new Color(20 + random.nextInt(110), 20 + random
    .nextInt(110), 20 + random.nextInt(110)));
    //调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
    g.drawString(String.valueOf(arrNumber.charAt(rand)),13*i+6,16); 
    //g.drawString(rand, 13 * i + 6, 16);
    }
    // 将认证码存入SESSION
    session.setAttribute("rand", sRand);
    // 图象生效
    g.dispose();
    // 输出图象到页面
    ImageIO.write(image, "JPEG", response.getOutputStream());
    out.clear();
    out = pageContext.pushBody();
    %>
    页面调用的时候这么用
    <img src="code.jsp?" onclick="this.src+=Math.random();" style="cursor:hand"/>
      

  4.   

    网上真的很多,百度一下,或者给我发邮件我发给你一个[email protected]
      

  5.   

    随即生成一个字符串,然后把字符串做成图片或者加些css
      

  6.   

    这个是我自己写的,很简单,一看就懂:package com.estore.struts.utils;import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.Random;import javax.imageio.ImageIO;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    /*
     * 产生图片验证码。
     * 
     */
    public class CodeServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException { response.setContentType("image/png"); String code = genCode(); request.getSession().setAttribute("code", code); BufferedImage image = new BufferedImage(80, 30, BufferedImage.TYPE_4BYTE_ABGR);
    Graphics2D g = (Graphics2D) image.getGraphics();

    g.setColor(new Color(237, 189, 0));
    g.drawLine(0, 0, 80, 30);

    g.setColor(new Color(160, 139, 57));
    Font f = g.getFont();

    g.setFont(new Font(f.getFamily(), f.getStyle(), 20));
    g.drawString(code, 10, 20); OutputStream out = response.getOutputStream(); ImageIO.write(image, "png", out); out.close(); } private String genCode() {
    Random random = new Random();
    StringBuilder buf = new StringBuilder();
    buf.append((char) ('A' + random.nextInt(26)));
    buf.append((char) ('A' + random.nextInt(26)));
    buf.append((char) ('A' + random.nextInt(26)));
    buf.append((char) ('A' + random.nextInt(26)));
    return buf.toString();
    } public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    doGet(request, response);
    }
    }
      

  7.   

    大家帮帮忙,看看这个帖子吧。和验证码相关的问题http://topic.csdn.net/u/20100420/18/7f46d755-b147-4145-a0ed-0ba9f220bbb7.html?1889谢谢。楼主不会讨厌我在你的帖子里打广告吧 ?