zoukankan      html  css  js  c++  java
  • 安全码

    <pre name="code" class="html"><p>
    							<span id="sure-word" class="fond">验证码:</span>
    								<span style="70px">
    								<input id="Verification" name="Verification" type="text"
    									size="6" style="60px"/>
    								</span>
    								<span id="vcodeValidMsg"></span>
    								<span style="margin-left:10px;">
    								<img src="EC/SecurityCodeImage" id="Verify" style="cursor: hand;" alt="看不清,换一张" /> 
    								</span>
    							</p>
    							<span id="Verification.info" style="color:red"></span>


    
    
    <pre name="code" class="javascript">//除掉字符串两端的空格
    	function strip(str) {
    		var reg = /(^s*)|(s*$)/g;
    		return str.replace(reg, '');
    	}
    	function verfy_verfy11() {
    		//flag.code = false;//设置成为通过检測
    		var code = strip(document.getElementById("Verification").value);
    		//非空检測
    		if (code == "") {
    			$("#Verification\.info").html(
    					"<img src='EC/user/images/wrong.gif'/>验证码不能为空!");
    			return;
    		}
    		//ajax检測
    		$("#Verification\.info").html(
    				//"<img src='../images/window_loading.gif'/>正在检測...");
    		$.post("EC/user/valid.action", {
    			"code" : code
    		}, function(data) {
    			if (data) {
    				$("#Verification\.info").html(
    						"<img src='EC/user/images/right.gif'/>验证码正确!");
    				flag.code = true;
    			} else {
    				$("#Verification\.info").html(
    						"<img src='EC/user/images/wrong.gif'/>验证码错误!");
    			}
    		}));
    	}
    

    <script>$(function() {//点击图片更换验证码$("#Verify").click(function() {$(this).attr("src","EC/SecurityCodeImage?timestamp="+ new Date().getTime());});});window.onload = function() {var verifyObj = document.getElementById("Verify");verifyObj.onclick = function() {this.src = "EC/SecurityCodeImage?timestamp="+ new Date().getTime();};};
    	
    </script>


    $(document).ready(function() {
    	
           //验证码检測
         	$(function() {
         		$("#Verification").blur(function() {
         			verfy_verfy11();
         		});
         	});
    	});
          <pre name="code" class="html"> <package name="User" extends="struts-default" namespace="/EC">
    	<!-- 验证码 -->
    		<action name="SecurityCodeImage" class="biz.cld.web.action.user.SecurityCodeImageAction">
    			<result name="success" type="stream">
    				<param name="contentType">image/jpeg</param>
    				<param name="inputName">imageStream</param>
    				<param name="bufferSize">2048</param>
    			</result>
    		</action>
        </package>

    
    
    <!--  ajax verfy-->
    	<package name="userJson" extends="json-default" namespace="/EC">
    		<!-- registerNameVerfy ajax-->
    		<action name="registerNameVerfy"  class="userManageAction"  method="registerNameVerfy">
    		   <result name="success" type="json">
    		     <param name="root">verfy</param>
    		   </result>
    		   <result name="error" type="json">
    		     <param name="root">verfy</param>
    		   </result>
    		</action>
    		
    		<!-- registerEmailVerfy ajax-->
    		<action name="registerEmailVerfy" class="userManageAction"  method="registerEmailVerfy">
    		   <result name="success">
    		     <param name="root">verfy</param>
    		   </result>
    		   <result name="error" type="">
    		     <param name="root">verfy</param>
    		   </result>
    		</action>
    		
    		<!-- ajax校验验证码 -->
    		<action name="valid" class="biz.cld.web.action.user.ValidAction">
    			<result name="success" type="json">
    				<param name="root">ok</param>
    			</result>
    		</action>
    		
    		
    	</package>

    package biz.cld.web.action.user;
     
     import java.util.Arrays;
     
     /**
      * 工具类。生成随机验证码字符串
      * @version 1.0 2012/08/21
      * @author <span style="font-family: Arial, Helvetica, sans-serif;">曾修建</span>
      *
      */
     public class SecurityCode {
         
         /**
          * 验证码难度级别,Simple仅仅包括数字,Medium包括数字和小写英文,Hard包括数字和大写和小写英文
          */
         public enum SecurityCodeLevel {Simple,Medium,Hard};
         
         /**
          * 产生默认验证码,4位中等难度
          * @return  String 验证码
          */
         public static String getSecurityCode(){
             return getSecurityCode(6,SecurityCodeLevel.Medium,false);
         }
         
         /**
          * 产生长度和难度随意的验证码
          * @param length  长度
          * @param level   难度级别
          * @param isCanRepeat  是否可以出现反复的字符,假设为true,则可能出现 5578这样包括两个5,假设为false。则不可能出现这样的情况
          * @return  String 验证码
          */
         public static String getSecurityCode(int length,SecurityCodeLevel level,boolean isCanRepeat){
             
             //随机抽取len个字符
             int len=length;
             
             //字符集合(除去易混淆的数字0、数字1、字母l、字母o、字母O)
             char[] codes={'1','2','3','4','5','6','7','8','9',
                           'a','b','c','d','e','f','g','h','i',
                           'j','k','m','n','p','q','r','s','t',
                           'u','v','w','x','y','z','A','B','C',
                           'D','E','F','G','H','I','J','K','L',
                           'M','N','P','Q','R','S','T','U','V',
                           'W','X','Y','Z'};
             
             //依据不同的难度截取字符数组
             if(level==SecurityCodeLevel.Simple){
                 codes=Arrays.copyOfRange(codes, 0,9);
             }else if(level==SecurityCodeLevel.Medium){
                 codes=Arrays.copyOfRange(codes, 0,33);
             }
             else if(level==SecurityCodeLevel.Hard){
                 codes=Arrays.copyOfRange(codes, 0,57);
             }
             
             //字符集合长度
             int n=codes.length;
             
             //抛出执行时异常
             if(len>n&&isCanRepeat==false){
                 throw new RuntimeException(
                         String.format("调用SecurityCode.getSecurityCode(%1$s,%2$s,%3$s)出现异常," +
                                        "当isCanRepeat为%3$s时,传入參数%1$s不能大于%4$s",
                                        len,level,isCanRepeat,n));
             }
             
             //存放抽取出来的字符
             char[] result=new char[len];
             
             //推断是否能出现反复的字符
             if(isCanRepeat){
                 for(int i=0;i<result.length;i++){
                     //索引 0 and n-1
                     int r=(int)(Math.random()*n);
                 
                     //将result中的第i个元素设置为codes[r]存放的数值
                     result[i]=codes[r];
                 }
             }else{
                 for(int i=0;i<result.length;i++){
                     //索引 0 and n-1
                     int r=(int)(Math.random()*n);
                     
                     //将result中的第i个元素设置为codes[r]存放的数值
                     result[i]=codes[r];
                     
                     //必须确保不会再次抽取到那个字符,由于全部抽取的字符必须不同样。
                     //因此,这里用数组中的最后一个字符改写codes[r],并将n减1
                     codes[r]=codes[n-1];
                     n--;
                 }
             }
             
             return String.valueOf(result);
         }
     }

    package biz.cld.web.action.user;
     
     import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
     import java.io.ByteArrayInputStream;
     import java.util.Map;
    import org.apache.struts2.interceptor.SessionAware;
     
     /**
      * 提供图片验证码
      * @version 1.0 2012/08/22
      * @author <span style="font-family: Arial, Helvetica, sans-serif;">曾修建</span>
    
      */
     @SuppressWarnings("serial")
     public class SecurityCodeImageAction extends ActionSupport implements SessionAware{
         
         //Struts2中Map类型的session
         private Map<String, Object> session;
         
         //图片流
         private ByteArrayInputStream imageStream;
     
         public ByteArrayInputStream getImageStream() {
             return imageStream;
         }
     
         public void setImageStream(ByteArrayInputStream imageStream) {
             this.imageStream = imageStream;
         }
     
         
         public String execute() throws Exception {
             //假设开启Hard模式,能够不区分大写和小写
     //        String securityCode = SecurityCode.getSecurityCode(4,SecurityCodeLevel.Hard, false).toLowerCase();
             
             //获取默认难度和长度的验证码
             String securityCode = SecurityCode.getSecurityCode();
             imageStream = SecurityImage.getImageAsInputStream(securityCode);
             //放入session中
         //   session.put("SESSION_SECURITY_CODE", securityCode);
             ActionContext.getContext().getSession().put("SESSION_SECURITY_CODE", securityCode);
             return SUCCESS;
         }
     
         public void setSession(Map<String, Object> session) {
             this.session = session;
         }
     
     }

    package biz.cld.web.action.user;
     
     import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
     import java.io.ByteArrayInputStream;
     import java.util.Map;
    import org.apache.struts2.interceptor.SessionAware;
     
     /**
      * 提供图片验证码
      * @version 1.0 2012/08/22
      * @author <span style="font-family: Arial, Helvetica, sans-serif;">曾修建</span>
      */
     @SuppressWarnings("serial")
     public class SecurityCodeImageAction extends ActionSupport implements SessionAware{
         
         //Struts2中Map类型的session
         private Map<String, Object> session;
         
         //图片流
         private ByteArrayInputStream imageStream;
     
         public ByteArrayInputStream getImageStream() {
             return imageStream;
         }
     
         public void setImageStream(ByteArrayInputStream imageStream) {
             this.imageStream = imageStream;
         }
     
         
         public String execute() throws Exception {
             //假设开启Hard模式,能够不区分大写和小写
     //        String securityCode = SecurityCode.getSecurityCode(4,SecurityCodeLevel.Hard, false).toLowerCase();
             
             //获取默认难度和长度的验证码
             String securityCode = SecurityCode.getSecurityCode();
             imageStream = SecurityImage.getImageAsInputStream(securityCode);
             //放入session中
         //   session.put("SESSION_SECURITY_CODE", securityCode);
             ActionContext.getContext().getSession().put("SESSION_SECURITY_CODE", securityCode);
             return SUCCESS;
         }
     
         public void setSession(Map<String, Object> session) {
             this.session = session;
         }
     
     }

    package biz.cld.web.action.user;
    
    import com.opensymphony.xwork2.ActionContext;
    
    import biz.cld.framework.action.BaseActionImpl;
    
    /**
     * 类说明
     *
     * @author 曾修建
     * @version 创建时间:2014-7-8 下午11:58:33
     */
    public class ValidAction extends BaseActionImpl {
    	private String code;//input
    	private boolean ok=false;//output-->json
    	public String execute()throws Exception{
    		Thread.sleep(1000);
    		//比較
    		String scode=(String) ActionContext.getContext().getSession().get("SESSION_SECURITY_CODE");
    		if(code.equalsIgnoreCase(scode)){
    			ok=true;
    		}else{
    			ok=false;
    		}
    		return "success";//调用jsonResult输出ok
    	}
    	public String getCode() {
    		return code;
    	}
    	public void setCode(String code) {
    		this.code = code;
    	}
    	public boolean isOk() {
    		return ok;
    	}
    	public void setOk(boolean ok) {
    		this.ok = ok;
    	}
    }
    



    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    C#字符串的比较
    C#字符串分割
    [Android] Android 卡片式控件CardView的优雅使用
    [Android] Android Studio 使用config.gradle统一管理项目的依赖库
    [Android] Android Studio 修改Gradle使用国内源
    [Android] Sqlite 数据库操作 工具封装类
    [Android] Android 去掉界面标题栏的方法
    [Android] Android RecycleView和ListView 自定义Adapter封装类
    [Android] Android 让UI控件固定于底部的几种方法
    [Android] Android读取Asset下文件的最简单的方法总结(用于MediaPlayer中)
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4943422.html
Copyright © 2011-2022 走看看