zoukankan      html  css  js  c++  java
  • 图片验证码

    1.今天从网上找了一个图片验证码的例子,很好,看代码

    package com.zhao.util;
    
    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;
    import javax.servlet.http.HttpSession;
    
    public class AuthImg extends HttpServlet
    {
        private Font mFont = new Font("Arial Black", Font.BOLD, 16);//字体,风格,字号
        public void init() throws ServletException
        {
            super.init();//applet初始化,在applet首次创建时执行
        }
        Color getRandColor(int fc,int bc)//随机产生r,g,b均在fc和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);
        }
    
        public void service(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");
            
            int width=100, height=150;
            BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);
            
            Graphics g = image.getGraphics();
            Random random = new Random();
            g.setColor(getRandColor(200,250));
            g.fillRect(1, 1, width-1, height-1);
            g.setColor(new Color(102,102,102));
            g.drawRect(0, 0, width-1, height-1);//画矩形。左角坐标,宽,高
            g.setFont(mFont);
    
            g.setColor(getRandColor(160,200));
            for (int i=0;i<155;i++)
            {
                int x = random.nextInt(width - 1);
                int y = random.nextInt(height - 1);
                int xl = random.nextInt(6) + 1;
                int yl = random.nextInt(12) + 1;
                g.drawLine(x,y,x + xl,y + yl);//画直线起点坐标、终点坐标
            }
            for (int i = 0;i < 70;i++)
            {
                int x = random.nextInt(width - 1);
                int y = random.nextInt(height - 1);
                int xl = random.nextInt(12) + 1;
                int yl = random.nextInt(6) + 1;
                g.drawLine(x,y,x - xl,y - yl);
            }
    
            String sRand="";
            for (int i=0;i<6;i++)
            {
    			String tmp = getRandomChar();
                sRand += tmp;
                g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
    	        g.drawString(tmp,15*i+10,15);//写文本tmp
            }
    
            HttpSession session = request.getSession(true);
            session.setAttribute("rand",sRand);
            g.dispose();
            ImageIO.write(image, "JPEG", response.getOutputStream());
        }
        private String getRandomChar()//产生文本
        {
    		int rand = (int)Math.round(Math.random() * 2);
    		long itmp = 0;
    		char ctmp = 'u0000';
    		switch (rand)
    		{
    			case 1:
    				itmp = Math.round(Math.random() * 25 + 65);
    				ctmp = (char)itmp;
    				return String.valueOf(ctmp);
    			case 2:
    				itmp = Math.round(Math.random() * 25 + 97);
    				ctmp = (char)itmp;
    				return String.valueOf(ctmp);
    			default :
    				itmp = Math.round(Math.random() * 9);
    				return String.valueOf(itmp);
    		}
        }
    }
    

    2.原作者给的步骤

    1.建立一个AuthImg类,用来生成验证码
    2.在web中配置AuthImg
      <servlet>
        <servlet-name>img</servlet-name>
        <servlet-class>com.zhao.util.AuthImg</class-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>img</servlet-name>
        <url-pattern>/authImg</url-pattern>
      </servlet-mapping>
    3.页面上:
     验证码如图:<img src="authImg" id="authImg"/>看不清?<a href="#" onClick="refresh()">单击此处刷新</a>
    <SCRIPT type="text/javascript" >
    			function refresh(){
    				document.getElementById("authImg").src='authImg?now='+new Date();
    			}
    		</SCRIPT>
    4.AuthImg.java
    

    3.截图(框框改的有点大)

  • 相关阅读:
    jquery的动画函数animate()讲解一
    用js来实现页面的换肤功能(带cookie记忆)
    Extjs换肤+cookie皮肤记忆功能
    jquery换肤
    bootstrap的alert提示框的关闭后再显示问题
    jquery.cookie中的操作
    CSS中设置margin:0 auto; 水平居中无效的原因分析
    jQuery 遍历 json 方法大全
    jquery.min.map 404 (Not Found)出错的原因及解决办法
    AJAX 跨域请求的解决办法:使用 JSONP获取JSON数据
  • 原文地址:https://www.cnblogs.com/feifeishi/p/6494870.html
Copyright © 2011-2022 走看看