精华内容
下载资源
问答
  • 动态验证码

    2013-11-03 16:24:21
    java动态验证码 用学习代码,小型软件,件仅供参考。
  • 12306网站推出“彩色动态验证码机制”,新版验证码不但经常出现字符叠压,还不停抖动,不少人大呼“看不清”,称“那个验证码,是毕加索的抽象画么!”铁总客服则表示:为了能正常购票只能这样。而多家抢票软件接近...
  • Servlet生成动态验证码

    千次阅读 热门讨论 2014-08-31 11:12:19
    默默的想起了12306网站的验证码,更新换代那么多次,还是防不住一些厂商的软件。通过学习,体验了一下验证码的制作过程。 1.新建ValidateCodeServlet的Servlet类,在该类的doPost()方法中实现生成验证码的功能(包含...

    如今很多的网站都验证码功能,加入验证码可以防止黑客利用恶意程序,在网站中进行频繁登录、注册等操作。默默的想起了12306网站的验证码,更新换代那么多次,还是防不住一些厂商的软件。通过学习,体验了一下验证码的制作过程。

    1.新建ValidateCodeServlet的Servlet类,在该类的doPost()方法中实现生成验证码的功能(包含随机获取颜色的功能)

    package com.lhg.codeservlet;
    
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    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.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class ValidateCodeServlet extends HttpServlet {
    
    	@Override
    	protected void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		//禁止页面缓存
    		response.setHeader("Pragma", "No-cache");
    		response.setHeader("Cache-control", "No-cache");
    		//设置过期的时间
    		response.setDateHeader("Expires", 0);
    		response.setContentType("image/jpeg");  //设置响应正文的MIME类型为图片
    		int width =60, height =20;
    		/*创建一个位于缓存的图像,宽度为60,高度为20*/
    		BufferedImage image =new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    		Graphics g =image.getGraphics();  //获取用于处理图形上下文的对象,相当于画笔
    		Random random =new Random();  //创建生成随机数的对象
    		g.setColor(getRandomColor(200,250));  //设置画像的背景色	
    		g.fillRect(0, 0, width, height);  //画一个矩形,坐标(0,0),宽度为60,高度为20
    		g.setFont(new Font("Times New Roman",Font.PLAIN,18));  //设定字体格式
    		g.setColor(getRandomColor(160, 200));  
    		for(int i = 0;i<100;i++){  //产生100条随机干扰线
    			int x  = random.nextInt(width);	
    			int y = random.nextInt(height);	
    			int x1 = random.nextInt(12);	
    			int y1 = random.nextInt(12);	
    			g.drawLine(x, y, x+x1, y+y1);  //在图形的坐标之间画干扰线
    		}
    		String strCode ="";
    		for(int i =0; i<4; i++){
    			String strNumber =String.valueOf(random.nextInt(10)); //设置每次随机的数0~10
    			strCode =strCode +strNumber;  //拼接生成的验证码
    			//设置字体的颜色
    			g.setColor(new Color(15+random.nextInt(120),15+random.nextInt(120),15+random.nextInt(120)));
    			
    			g.drawString(strNumber, 13 * i+6, 16);  //将验证码一次画到图像上,坐标(x=13*i +6,y =16)
    		}
    		request.getSession().setAttribute("Code", strCode); //验证码放到session中
    		g.dispose();
    		ImageIO.write(image,"JPEG", response.getOutputStream()); //输出JEPG格式的图像
    		response.getOutputStream().flush(); //刷新输出流
    		response.getOutputStream().close();  //关闭输出流
    		
    	}	
    	/**
    	 * 随机获取颜色
    	 * @param fc
    	 * @param bc
    	 * @return
    	 */
    	public Color getRandomColor(int fc,int bc){
    		Random random = new Random();
    		Color randomColor =null;
    		if(fc>255){
    			fc=255;
    		}
    		if(bc>255){
    			bc=255;
    		}
    		//设置0~255之间的随机颜色值
    		int r=fc +random.nextInt(bc - fc);
    		int g=fc +random.nextInt(bc - fc);
    		int b=fc +random.nextInt(bc - fc);
    		randomColor = new Color(r,g,b);
    		return randomColor;  //返回具有指定的RGB颜色
    	}
    
    	@Override
    	protected void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		doPost(request, response);
    	}
    }

    由于服务器端的Servlet生成的图像首先是存放在缓存中,为了使客户端获取最新的图像,避免通过缓存获取图像,

    应该在Servlet中通过设置HTTP响应头来禁止客户端缓存页面。即下面几行代码:

    <span style="font-size:18px;">		//禁止页面缓存
    		response.setHeader("Pragma", "No-cache");
    		response.setHeader("Cache-control", "No-cache");
    		//设置过期的时间
    		response.setDateHeader("Expires", 0);</span>

    Servlet中,首先要设置响应正文的类型为image/jpeg,表示响应的是一个图片,然后通过java.awt包中操作图像的类来生成一个图像。

    主要用到以下几个类:

    java.awt.image.BufferedImage:创建该对象时,会在缓存中构造一个图像

    java.awt.Graphics:该类的对象表示一个画笔,可以用它来画一些图形。

    java.util.Random:该类的对象用于生成随机数。

    2.在JavaWeb项目中的index配置页面标签

        <form action="index.jsp" method="post">
    		用户名:   <input type="text" name="name"/><br>
    		验证码:    <img name="img1"  src ="validatecode"><br> 
    		输入验证码:<input type="text" name="code"/><br>
    		<input type="submit" value="刷新">				
        </form>

    在该页的<img>标签中,通过src属性来调用ValidateCodeServlet类生成验证码,这个需要在web.xml配置servlet。


    3.web.xml中配置


      <servlet>
        <servlet-name>ValidateCodeServlet</servlet-name>
        <servlet-class>com.lhg.codeservlet.ValidateCodeServlet</servlet-class>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>ValidateCodeServlet</servlet-name>
        <url-pattern>/validatecode</url-pattern>
      </servlet-mapping>

    通过学习验证码实现的过程,了解了这个应用性很高的知识,发现也不是很难。

    主要就是画图形——>获取随机数——>拼接输出。有兴趣的可以下载下面的源码看看:

    验证码

    展开全文
  • 动态验证码生成实例

    千次阅读 2013-11-26 22:59:29
    为了防止某些用户使用软件进行登录和发布信息,一般网站都采用随机的图片类型的验证码进行动态验证。下面实现一个简单的动态验证 1. 图片验证码生成Servlet,RandomCodeServlet.java package test; import java....

        为了防止某些用户使用软件进行登录和发布信息,一般网站都采用随机的图片类型的验证码进行动态验证。下面实现一个简单的动态验证

    1. 图片验证码生成Servlet,RandomCodeServlet.java

    package test;
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.util.Random;
    import javax.imageio.ImageIO;
    import javax.servlet.*;
    import javax.servlet.http.*;
    public class RandomCodeServlet extends HttpServlet{
        //验证码图片的宽度。
        private int width=60;
        //验证码图片的高度。
        private int height=20;
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException{   
            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("Times New Roman",Font.PLAIN,18);
            //设置字体。
            g.setFont(font);
            //画边框。
            g.setColor(Color.BLACK);
            g.drawRect(0,0,width-1,height-1);
            //随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。
            g.setColor(Color.GRAY);
            for (int i=0;i<160;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);
            }
            //randomCode用于保存随机产生的验证码,以便用户登录后进行验证。
            StringBuffer randomCode=new StringBuffer();
            int red=0,green=0,blue=0;
            //随机产生4位数字的验证码。
            for (int i=0;i<4;i++){
                //得到随机产生的验证码数字。
                String strRand=String.valueOf(random.nextInt(10));
                //产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
                red=random.nextInt(110);
                green=random.nextInt(50);
                blue=random.nextInt(50);
                //用随机产生的颜色将验证码绘制到图像中。
                g.setColor(new Color(red,green,blue));
                g.drawString(strRand,13*i+6,16);
                //将产生的四个随机数组合在一起。
                randomCode.append(strRand);
            }
            //将四位数字的验证码保存到Session中。
            HttpSession session=req.getSession();
            session.setAttribute("randomCode",randomCode.toString());
            //禁止图像缓存。
            resp.setHeader("Pragma","no-cache");
            resp.setHeader("Cache-Control","no-cache");
            resp.setDateHeader("Expires", 0);
            resp.setContentType("image/jpeg");
            //将图像输出到Servlet输出流中。
            ServletOutputStream sos=resp.getOutputStream();
            ImageIO.write(buffImg, "jpeg",sos);
            sos.close();
        }
    }

    2. 编写登陆页面,login.html

    <html>
        <head><title>登录页面</title>
        <body>
            <form method="POST" action="loginchk">
                <table>
                    <tr><td>用户名:</td><td><input type="text" name="username"></td></tr>
                    <tr><td>密码:</td><td><input type="password" name="password"></td></tr>
                    <tr><td>验证码:</td><td><input type="text" name="random" maxlength="4"><img src="imgcode"></td></tr>
                    <tr><td><input type="reset" value="重填"></td><td><input type="submit" value="提交"></td></tr>
                </table>
            </form>
        </body>
    </html>

    3. 编写登陆处理Servlet,LoginCheckServlet.java

    package test;
    import javax.servlet.*;
    import java.io.*;
    import javax.servlet.http.*;
    public class LoginCheckServlet extends HttpServlet{
        public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException{
            HttpSession session=req.getSession();
            String randomCode=(String)session.getAttribute("randomCode");
            if(null==randomCode){
                resp.sendRedirect("login.html");
                return;
            }
            String reqRandom=req.getParameter("random");
            req.setCharacterEncoding("GBK");
            resp.setContentType("text/html;charset=GBK");
            PrintWriter out=resp.getWriter();
            if(randomCode.equals(reqRandom)){
                out.println("验证码匹配!");
            }else{
                out.println("验证码校验失败,请返回重新输入!");
            }
            out.close();
        }
    }

    4. Servlet配置

      <servlet>
       <servlet-name>LoginCheckServlet</servlet-name>
        <servlet-class>test.LoginCheckServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>LoginCheckServlet</servlet-name>
        <url-pattern>/loginchk</url-pattern>
      </servlet-mapping>
     
      <servlet>
       <servlet-name>RandomCodeServlet</servlet-name>
        <servlet-class>test.RandomCodeServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>RandomCodeServlet</servlet-name>
        <url-pattern>/imgcode</url-pattern>
      </servlet-mapping>


    展开全文
  •  12306网站推出“彩色动态验证码机制”,新版验证码不但经常出现字符叠压,还不停抖动,不少人大呼“看不清”,称“那个验证码,是毕加索的抽象画么!”铁总客服则表示:为了能正常购票只能这样。而多家抢票软件接近...

      背景:

      12306网站推出“彩色动态验证码机制”,新版验证码不但经常出现字符叠压,还不停抖动,不少人大呼“看不清”,称“那个验证码,是毕加索的抽象画么!”铁总客服则表示:为了能正常购票只能这样。而多家抢票软件接近“报废”,引发不少网友不满的吐槽称“太抽象太艺术了”。

      正题:

      以前做项目有时候也会用到验证码,但基本都是静态的。这次也想凑凑12306的热闹。

      闲言少续,切入正题,先上代码,实现方法:

      

    复制代码

      public void ShowCode()

      {

      //对象实例化

      Validate GifValidate = new Validate();

      #region 对验证码进行设置(不进行设置时,将以默认值生成)

      //验证码位数,不小于4位

      GifValidate.ValidateCodeCount = 4;

      //验证码字体型号(默认13)

      GifValidate.ValidateCodeSize = 13;

      //验证码图片高度,高度越大,字符的上下偏移量就越明显

      GifValidate.ImageHeight = 23;

      //验证码字符及线条颜色(需要参考颜色类)

      GifValidate.DrawColor = System.Drawing.Color.BlueViolet;

      //验证码字体(需要填写服务器安装的字体)

      GifValidate.ValidateCodeFont = "Arial";

      //验证码字符是否消除锯齿

    展开全文
  • 随机生成动态验证码

    2014-01-09 18:13:38
    为了防止某些用户使用软件进行登录和发布信息,很多网站在用户登录或者发布信息时,都要求用户输入验证码验证码通常是以一幅图片的形式显示的,用户按照图片中显示的数字或者字母依次输入,服务端将对用户输入和...

    为了防止某些用户使用软件进行登录和发布信息,很多网站在用户登录或者发布信息时,都要求用户输入验证码。验证码通常是以一幅图片的形式显示的,用户按照图片中显示的数字或者字母依次输入,服务端将对用户输入和验证码进行比较,以判断用户是否经过检验。由于验证码都是随机生成的,自动发布信息的软件无法知道生成的验证码。

     

      1生成图片的程序:
      2/*
      3 * RandomCodeServlet.java
      4 *
      5 * Created on 2007-5-29, 0:51:02
      6 *
      7 * To change this template, choose Tools | Template Manager
      8 * and open the template in the editor.
      9 */
     10
     11package com.javahe.image;
     12
     13/**
     14 *
     15 * @author java-he
     16 */
     17import java.awt.Color;
     18import java.awt.Font;
     19import java.awt.Graphics2D;
     20import java.awt.image.BufferedImage;
     21import java.util.Random;
     22import javax.imageio.ImageIO;
     23
     24import javax.servlet.*;
     25import java.io.*;
     26import javax.servlet.http.*;
     27
     28public class RandomCodeServlet extends HttpServlet {
     29    //验证码图片的宽度。
     30    private int width=60;
     31    //验证码图片的高度。
     32    private int height=20;
     33    
     34    protected void service(HttpServletRequest req, HttpServletResponse resp)
     35            throws ServletException, java.io.IOException {
     36        BufferedImage buffImg=new BufferedImage(width,height,
     37                BufferedImage.TYPE_INT_RGB);
     38        Graphics2D g=buffImg.createGraphics();
     39        
     40        //创建一个随机数生成器类。
     41        Random random=new Random();
     42        
     43        g.setColor(Color.WHITE);
     44        g.fillRect(0,0,width,height);
     45        
     46        //创建字体,字体的大小应该根据图片的高度来定。
     47        Font font=new Font("Times New Roman",Font.PLAIN,18);
     48        //设置字体。
     49        g.setFont(font);
     50        
     51        //画边框。
     52        g.setColor(Color.BLACK);
     53        g.drawRect(0,0,width-1,height-1);
     54        
     55        //随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。
     56        g.setColor(Color.GRAY);
     57        for (int i=0;i<160;i++) {
     58            int x = random.nextInt(width);
     59            int y = random.nextInt(height);
     60            int xl = random.nextInt(12);
     61            int yl = random.nextInt(12);
     62            g.drawLine(x,y,x+xl,y+yl);
     63        }
     64        
     65        
     66        //randomCode用于保存随机产生的验证码,以便用户登录后进行验证。
     67        StringBuffer randomCode=new StringBuffer();
     68        int red=0,green=0,blue=0;
     69        
     70        //随机产生4位数字的验证码。
     71        for (int i=0;i<4;i++) {
     72            //得到随机产生的验证码数字。
     73            String strRand=String.valueOf(random.nextInt(10));
     74            
     75            //产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
     76            red=random.nextInt(110);
     77            green=random.nextInt(50);
     78            blue=random.nextInt(50);
     79            
     80            //用随机产生的颜色将验证码绘制到图像中。
     81            g.setColor(new Color(red,green,blue));
     82            g.drawString(strRand,13*i+6,16);
     83            
     84            //将产生的四个随机数组合在一起。
     85            randomCode.append(strRand);
     86        }
     87        //将四位数字的验证码保存到Session中。
     88        HttpSession session=req.getSession();
     89        session.setAttribute("randomCode",randomCode.toString());
     90        
     91        //禁止图像缓存。
     92        resp.setHeader("Pragma","no-cache");
     93        resp.setHeader("Cache-Control","no-cache");
     94        resp.setDateHeader("Expires", 0);
     95        
     96        resp.setContentType("image/jpeg");
     97        
     98        //将图像输出到Servlet输出流中。
     99        ServletOutputStream sos=resp.getOutputStream();
    100        ImageIO.write(buffImg, "jpeg",sos);
    101        sos.close();
    102    }
    103}
    104
    105


     1写好后在web.xml中添加对应的servlet。然后页面调用的时候用。
     2<%@page contentType="text/html"%>
     3<%@page pageEncoding="UTF-8"%>
     4<%--
     5The taglib directive below imports the JSTL library. If you uncomment it,
     6you must also add the JSTL library to the project. The Add Library action
     7on Libraries node in Projects view can be used to add the JSTL 1.1 library.
     8--%>
     9<%--
    10<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
    11--%>
    12<%
    13if(request.getParameter("random")!=null)
    14{
    15    if(request.getParameter("random").equals(session.getAttribute("randomCode")))
    16    {
    17        out.println("ok!");
    18    }
    19}
    20%>
    21<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    22"http://www.w3.org/TR/html4/loose.dtd">
    23
    24<html>
    25    <head><title>登录页面</title>
    26    <body>
    27        <form method="POST" action="index.jsp">
    28            <table>
    29                <tr>
    30                    <td>用户名:</td>
    31                    <td><input type="text" name="username"></td>
    32                </tr>
    33                <tr>
    34                    <td>密码:</td>
    35                    <td><input type="password" name="password"></td>
    36                </tr>
    37                <tr>
    38                    <td>验证码:</td>
    39                    <td>
    40                        <input type="text" name="random" maxlength="4">
    41                    <img src="imgcode">
    42                    </td>
    43                </tr>
    44                <tr>
    45                    <td><input type="reset" value="重填"></td>
    46                    <td><input type="submit" value="提交"></td>
    47                </tr>
    48            </table>
    49        </form>
    50    </body>
    51</html>
    52

     

    最近用netbeans 总容易发生一个运行错误,指向

    <nbdeploy debugmode="false" clientUrlPart="${client.urlPart}" forceRedeploy="${forceRedeploy}"/>

    。感觉是绑定tomcat失败。今天晚上调式这个程序的时候又遇到这个问题。发现重启电脑后,就正常了。也许是先前运行了其他tomcat下的程序吧。

     

    到sun的网站看看

    http://forum.java.sun.com/thread.jspa?threadID=610420&messageID=4240787

    发现不少人遇到同样问题,但是具体似乎没有说出个所以然,我也不想深究,必定问题自己能解决就行。呵呵。看来netbeans M9还是不够好哦。期待beta版本。

     

    感觉M9 运行,或者编译都显得很慢。呵呵,也许是我电脑内存只有 <chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="512" unitname="m">512M</chmetcnv>的原因吧。

    展开全文
  • 如果生成动态验证码

    2012-11-16 15:30:21
    为了防止某些用户使用软件进行登录和发布信息,很多网站在用户登录或者发布信息时,都要求用户输 入验证码验证码通是以一幅图片形式显示的。用户按照图片中显示的数字或字母依次输入,服务器站 将对用户的输入...
  • Java随机生成动态验证码程序

    热门讨论 2009-05-13 15:40:20
    为了防止某些用户使用软件进行登录和发布信息,很多网站在用户登录或者发布信息时,都要求用户输入验证码验证码通常是以一幅图片的形式显示的,用户按照图片中显示的数字或者字母依次输入,服务端将对用户输入和...
  • 为了防止某些用户使用软件进行登录和发布信息,很多网站在用户登录或者发布信息时,都要求用户输入验证码验证码通常是以一幅图片的形式显示的,用户按照图片中显示的数字或者字母依次输入,服务端将对用户输入和...
  • java随机生成动态验证码

    千次阅读 2007-11-23 14:45:00
    为 了防止某些用户使用软件进行登录和发布信息,很多网站在用户登录或者发布信息时,都要求用户输入验证码验证码通常是以一幅图片的形式显示的,用户按照图 片中显示的数字或者字母依次输入,服务端将对用户输入和...
  • 我们在设计用户登录模块时,经常会用到验证码,可以有效地防止黑客软件的恶意破解,现公开我常用的验证码的源代码,生成效果如图: 。 使用方法: 1、在Web项目中添加一个类,如“CreateImage.cs”,然后将我公布...
  • Asp.Net 动态生成验证码

    千次阅读 2007-03-19 23:29:00
    我们在设计用户登录模块时,经常会用到验证码,可以有效地防止黑客软件的恶意破解,现公开我常用的验证码的源代码,生成效果如图: 。 使用方法: 1、在Web项目中添加一个类,如“CreateImage.cs”,然后将我公布...
  • asp.net动态生成验证码

    千次阅读 多人点赞 2012-02-15 20:32:16
    我们在设计用户登录模块时,经常会用到验证码,可以有效地防止黑客软件的恶意破解,现公开我常用的验证码的源代码,  使用方法:  1、在Web项目中添加一个类,如“CreateImage.cs”,然后将我公布的源代码Copy...
  • 可供多种可调用动态链接库的编程语言调用(vc、vb、delphi、 java、c#、vb.net、asp、模拟精 灵等),调用简单、灵活,可以通过传递文件名或图片数据流两种方式进行识别,提供函数调用说明及各种语言的调用具体实例。...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 352
精华内容 140
关键字:

动态验证码软件