驗證碼技術樣本

來源:互聯網
上載者:User

標籤:驗證碼   驗證碼技術樣本   驗證碼樣本   

        繼續總結與編程相關的技術,今天總結的是大學期間關於驗證碼技術的一個小樣本:

        代碼1——產生驗證碼的jsp檔案,檔案名稱:captcha.jsp:

<%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*,java.io.*" %><html><body><%!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);}%><%response.setHeader("Pragma","No-cache");response.setHeader("Cache-Control","no-cache");response.setDateHeader("Expires", 0);int width=60;int height=20;BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics graphics = image.getGraphics();graphics.setColor(getRandColor(200,250));graphics.fillRect(0, 0, width, height);graphics.setFont(new Font("Times New Roman",Font.PLAIN,18));graphics.setColor(getRandColor(160,200));graphics.drawRect(0,0,width-1,height-1);Random random = new Random();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);graphics.drawLine(x,y,x+xl,y+yl);}String sRand="";for (int i=0;i<4;i++){String rand=String.valueOf(random.nextInt(10));sRand+=rand;graphics.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));graphics.drawString(rand,13*i+6,16);}session.setAttribute("rand",sRand);graphics.dispose();ImageIO.write(image,"JPEG",response.getOutputStream());out.clear();out = pageContext.pushBody();%></body></html>
        代碼2——使用驗證碼的jsp檔案,檔案名稱:index.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";%><html><head><title>驗證碼的使用</title><script type="text/javascript">  function reloadImage(){  document.getElementById("safecode").src="captcha.jsp?seed"+Math.random();  return false;  }          function checkYanZhengMa(){    var value = document.getElementById("yanzhengma").value;//擷取使用者在“驗證碼”文字框中輸入的驗證碼。      if(value==""){      document.getElementById("showYanZhengMa").innerHTML="<font color='red' size='2'>驗證碼不可為空!!!</font>";      }      else{      var xmlHttpRequest = null;        if(window.XMLHttpRequest){//適用於IE7以上(包括IE7)的IE瀏覽器、Firefox瀏覽器、Google瀏覽器和Opera瀏覽器    xmlHttpRequest = new XMLHttpRequest();//建立XMLHttpRequest    }else if(window.ActiveXObject){//適用於IE6.0以下(包括IE6.0)的IE瀏覽器    xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");    }//第一步,每次請求都需要重新建立一個XMLHttpRequest對象      xmlHttpRequest.open("post","./AjaxCheckCaptchaServlet",true);//第二步,open方法中的三個參數分別是:請求方式、路徑、是否非同步(true表示非同步,false表示同步)            xmlHttpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");            xmlHttpRequest.send("yanzhengma_value="+value);//第三步 發送請求    xmlHttpRequest.onreadystatechange=listeningReadyState;//第四步 監聽 處理響應後的資料 ,注意狀態是4時處理    function listeningReadyState(){    if(xmlHttpRequest.readyState==4){    var responseValue=xmlHttpRequest.responseText;    if(responseValue==1){    document.getElementById("showYanZhengMa").innerHTML="<font color='green' size='2'>通過驗證!!!</font>";}else if(responseValue==2){document.getElementById("showYanZhengMa").innerHTML="<font color='red' size='2'>驗證碼輸入錯誤!!!</font>";}    }        }         }        }        </script></head><body><input type="text" id="yanzhengma" name="yanzhengma" size="6" onblur="checkYanZhengMa();"> <img name="safecode" id="safecode" src="./captcha.jsp" onclick="reloadImage();"/><font color="#000000" size="4"><strong><a href="#" onclick="reloadImage();">換一張</a></strong></font> <font size="2" id="showYanZhengMa">  *請正確填寫驗證碼。</font></body></html>
        代碼3——非同步校正驗證碼的java檔案,檔案名稱:AjaxCheckCaptchaServlet:
package com.ghj.packageofservlet;import java.io.IOException;import java.io.PrintWriter;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 AjaxCheckCaptchaServlet extends HttpServlet {private static final long serialVersionUID = 6312962948471033343L;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request,response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("UTF-8");PrintWriter out = response.getWriter();HttpSession session=request.getSession();String yanzhengma=request.getParameter("yanzhengma_value");//擷取使用者在“驗證碼”文字框中輸入的驗證碼,引號中的值為引號傳參中的key。System.out.println("非同步驗證————使用者輸入的驗證碼是:"+yanzhengma);String rand = ((String)session.getAttribute("rand")).trim();//得到原驗證碼,"rand"來自captcha.jsp    System.out.println("非同步驗證————原驗證碼是:"+rand);if (rand.equals(yanzhengma)) {out.print("1");//“1”表示使用者輸入的驗證碼和原驗證碼一致。} else {out.print("2");//“2”表示使用者輸入的驗證碼和原驗證碼不一致。}out.flush();out.close();}}
        代碼4——配置Servlet的xml檔案,檔案名稱:web.xml:
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  <servlet>    <servlet-name>AjaxCheckCaptchaServlet</servlet-name>    <servlet-class>com.ghj.packageofservlet.AjaxCheckCaptchaServlet</servlet-class>  </servlet>  <servlet-mapping>    <servlet-name>AjaxCheckCaptchaServlet</servlet-name>    <url-pattern>/AjaxCheckCaptchaServlet</url-pattern>  </servlet-mapping>    <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>

        示範說明:將驗證碼輸入到文字框後,請讓該文字框失去焦點,程式採用非同步方式校正所輸入的驗證碼和原來產生的驗證碼是否一致。

        【0分下載資源

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.