zoukankan      html  css  js  c++  java
  • 两种验证码

    这里我写了两种验证码。一种是随机生成四位数,另一种是中文字的数学题加减题。事实上就是生成图片上有点不同,别的地方一样。

    html代码

    <%@ 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 XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html>
      <head>
        <base href="<%=basePath%>">
        <link href="<%=request.getContextPath() %>/css/init.css" rel="stylesheet" type="text/css" />
        <link rel="stylesheet" type="text/css" href="<%=path%>/css/exam.css" />
        	
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<meta http-equiv="expires" content="0">
    	<script>
    		function reloadImage(){
    			document.getElementById('identy').src='ValidateImage?ts='+new Date().getTime();
    		}
    		
    		
    	</script>
      </head>
      
      <body>
    <img src="ValidateImage" id="identy" onClick="reloadImage()"/>
    <form action="getzyms.action">
    <input type="submit" value="在后台打印验证码1"/>
    </form>
      </body>
    </html>
    

    struts.xml代码

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
    <struts>
    <constant name="struts.i18n.encoding" value="UTF-8"></constant>
    <package name="yzm" extends="struts-default">
    
    
    	<result-types>
           <result-type name="ValidateImage" class="yzm.ImageResult" />
        </result-types>
        
        <action name="ValidateImage" class="yzm.ImageAction" method="doDefault">
           <result name="image" type="ValidateImage" />
        </action>
        
        <action name="getzyms" class="com.web.actoin.getyzm" method="getzyms">
        </action>
    </package>
    </struts>    


    java代码

    package com.web.actoin;
    
    import org.apache.struts2.ServletActionContext;
    
    public class getyzm {
    	public void getzyms(){
    		System.out.println(ServletActionContext.getRequest().getSession().getAttribute("CheckCodeImageAction").toString().toUpperCase());
    	}
    }
    

    package yzm;
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.Result;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.struts2.ServletActionContext;
    public class ImageResult implements Result {
        public void execute(ActionInvocation ai) throws Exception {
           ImageAction action = (ImageAction)ai.getAction();
           HttpServletResponse response = ServletActionContext.getResponse();
           response.setHeader("Cash", "no cash");
           response.setContentType(action.getContentType());
           response.setContentLength(action.getContentLength());
           response.getOutputStream().write(action.getImageBytes());
           response.getOutputStream().flush();
        }
    }

    以下两个能够两选一(四位数字与加减)

    package yzm;
    import com.opensymphony.xwork2.ActionSupport;
    
    import java.util.Random;
    
    import java.awt.*;
    
    import java.awt.image.*;
    
    import java.io.ByteArrayOutputStream;
    
     
    
    import org.apache.struts2.ServletActionContext;
    
     
    
    public class ImageAction extends ActionSupport {
    	//
       
        private static final String SessionName = "CheckCodeImage";
        private static final Random rdm = new Random();
       
      
        private static final String[] china = new String[]{
        	"零","一","二","三","四","五","六","七","八","九"
        };
        private static final String[] fh = new String[]{
        	"加","减","乘"
        };
        
        public static Color getRandomColor(){
    		return new Color(rdm.nextInt(255),rdm.nextInt(255),rdm.nextInt(255));
    	}
    	
    	public static Color getReverseColor(Color c){
    		return new Color(255-c.getRed(),255-c.getGreen(),255-c.getBlue());
    	}
        
        private static final Font font = new Font(Font.SANS_SERIF,Font.BOLD, 16);
        
        private String text = "";
        private byte[] bytes = null;
        private String contentType = "image/jpeg";
        public byte[] getImageBytes(){
           return this.bytes;
        }
        public String getContentType(){
           return this.contentType;
        }
        public void setContentType(String value){
           this.contentType = value;
        }
        public int getContentLength(){
           return bytes.length;
        }
        
        private void generateText(){
           String source = new String();
           int f=rdm.nextInt(ImageAction.china.length);
           int s=rdm.nextInt(ImageAction.china.length);
           int h=rdm.nextInt(ImageAction.fh.length);
           source=ImageAction.china[f]+ImageAction.fh[h]+ImageAction.china[s];
           int result=0;
           if(h==0)
        	   result=f+s;
           if(h==1)
        	   result=f-s;
           if(h==2)
        	   result=f*s;
           System.out.println("gettext:"+source);
           this.text = new String(source);
           // 锟斤拷锟斤拷Session
           ServletActionContext.getRequest().getSession().setAttribute(SessionName,result);
        }
       
        private BufferedImage createImage(){
           int width = 70;
           int height = 20;
           Color color=Color.BLACK;
    		Color reverse=getReverseColor(color);
           BufferedImage image =
               new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    
    		Graphics2D g=image.createGraphics();
    		g.setFont(new Font(Font.SANS_SERIF,Font.BOLD,16));
    		g.setColor(color);
    		g.fillRect(0, 0, width, height);
    		g.setColor(reverse);
    		System.out.println("text:"+text);
    		g.drawString(text, 15, 15);
    		for(int i=0,n=rdm.nextInt(20);i<n;i++){
    			g.drawRect(rdm.nextInt(width),rdm.nextInt(height),1,1);
    		}
           g.dispose();
           return image;
        }
        private void generatorImageBytes(BufferedImage image){
           ByteArrayOutputStream bos = new ByteArrayOutputStream();
           try{
               javax.imageio.ImageIO.write(image, "jpg", bos);
               this.bytes = bos.toByteArray();
           }catch(Exception ex){
           }finally{
               try{
                  bos.close();
               }catch(Exception ex1){
               }
           }
        }
        
        public String doDefault(){   
           this.generateText();
           BufferedImage image = this.createImage();
           this.generatorImageBytes(image);
           System.out.println("_"+ServletActionContext.getRequest().getSession().getAttribute(SessionName));
           return "image";
        }
    }
    

    package yzm;
    import com.opensymphony.xwork2.ActionSupport;
    
    import java.util.Random;
    
    import java.awt.*;
    
    import java.awt.image.*;
    
    import java.io.ByteArrayOutputStream;
    
     
    
    import org.apache.struts2.ServletActionContext;
    
     
    
    public class Images extends ActionSupport {
    	//成生四位数字的图片
        /**
         * 锟斤拷证锟斤拷锟接︼拷锟絊ession锟斤拷
         */
        private static final String SessionName = "CheckCodeImageAction";
        private static final Random rdm = new Random();
        /**
         * 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷证锟斤拷锟斤拷锟斤拷源
         */
        private static final char[] source = new char[]{
        	'2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','J','K','L','M'
    		,'N','P','Q','R','S','T','U','V','W','X','Y','Z'
        };
        /**
         * 锟斤拷锟斤拷锟斤拷锟斤拷印锟斤拷证锟斤拷锟斤拷址锟斤拷锟缴�
         */
        public static Color getRandomColor(){
    		return new Color(rdm.nextInt(255),rdm.nextInt(255),rdm.nextInt(255));
    	}
    	
    	public static Color getReverseColor(Color c){
    		return new Color(255-c.getRed(),255-c.getGreen(),255-c.getBlue());
    	}
        /**
         * 锟斤拷锟节达拷印锟斤拷证锟斤拷锟斤拷锟斤拷锟�
         */
        private static final Font font = new Font(Font.SANS_SERIF,Font.BOLD, 16);
        /**
         * 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�
         */
        private String text = "";
        private byte[] bytes = null;
        private String contentType = "image/jpeg";
        public byte[] getImageBytes(){
           return this.bytes;
        }
        public String getContentType(){
           return this.contentType;
        }
        public void setContentType(String value){
           this.contentType = value;
        }
        public int getContentLength(){
           return bytes.length;
        }
        /**
         * 锟斤拷沙锟斤拷锟轿�锟斤拷锟斤拷锟斤拷址锟�
         * @return 
         */
        private void generateText(){
           char[] source = new char[4];
           for(int i=0; i<source.length; i++){
               source[i] = Images.source[rdm.nextInt(Images.source.length)];
           }
           this.text = new String(source);
           // 锟斤拷锟斤拷Session
           ServletActionContext.getRequest().getSession().setAttribute(SessionName,this.text);
        }
        /**
         * 锟斤拷锟节达拷锟斤拷锟斤拷纱锟接★拷锟斤拷锟斤拷锟街凤拷锟酵计�
         * @return 锟斤拷锟节达拷锟叫达拷锟斤拷锟侥达拷印锟斤拷锟街凤拷锟酵计�
         */
        private BufferedImage createImage(){
           int width = 70;
           int height = 20;
           Color color=Color.BLACK;
    		Color reverse=getReverseColor(color);
           BufferedImage image =
               new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    
    		Graphics2D g=image.createGraphics();
    		g.setFont(new Font(Font.SANS_SERIF,Font.BOLD,16));
    		g.setColor(color);
    		g.fillRect(0, 0, width, height);
    		g.setColor(reverse);
    		g.drawString(text, 15, 15);
    		for(int i=0,n=rdm.nextInt(20);i<n;i++){
    			g.drawRect(rdm.nextInt(width),rdm.nextInt(height),1,1);
    		}
           g.dispose();
           return image;
        }
        /**
         * 锟斤拷锟酵计�拷锟斤拷锟斤拷纸锟斤拷锟斤拷锟�
         * @param image 锟斤拷锟节达拷锟斤拷锟街斤拷锟斤拷锟斤拷锟酵计�
         */
        private void generatorImageBytes(BufferedImage image){
           ByteArrayOutputStream bos = new ByteArrayOutputStream();
           try{
               javax.imageio.ImageIO.write(image, "jpg", bos);
               this.bytes = bos.toByteArray();
           }catch(Exception ex){
           }finally{
               try{
                  bos.close();
               }catch(Exception ex1){
               }
           }
        }
        /**
         * 锟斤拷struts2锟斤拷锟斤拷锟斤拷锟斤拷锟矫的凤拷锟斤拷
         * @return 锟斤拷远锟斤拷锟斤拷锟街凤拷"image"
         */
        public String doDefault(){   
           this.generateText();
           BufferedImage image = this.createImage();
           this.generatorImageBytes(image);
           System.out.println("_"+ServletActionContext.getRequest().getSession().getAttribute(SessionName));
           return "image";
        }
    }
    




  • 相关阅读:
    浙大数据结构课后习题 练习二 7-2 Reversing Linked List (25 分)
    浙大数据结构课后习题 练习二 7-2 一元多项式的乘法与加法运算 (20 分)
    浙大数据结构课后习题 练习一 7-1 Maximum Subsequence Sum (25 分)
    浙大数据结构课后习题 练习一 7-1 最大子列和问题 (20 分)
    PAT Basic 1019 数字黑洞 (20 分)
    PAT Basic 1017 A除以B (20 分)
    PAT Basic 1013 数素数 (20 分)
    PAT Basic 1007 素数对猜想 (20 分)
    PAT Basic 1003 我要通过! (20 分)
    自动化运维——HelloWorld(一)
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7216965.html
Copyright © 2011-2022 走看看