程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> kaptcha生成圖形驗證碼實現方法

kaptcha生成圖形驗證碼實現方法

編輯:關於JSP

kaptcha 是一個非常實用的驗證碼生成工具。有了它,你可以生成各種樣式的驗證碼,因為它是可配置的。kaptcha工作的原理是調用 com.google.code.kaptcha.servlet.KaptchaServlet,生成一個圖片。同時將生成的驗證碼字符串放到 HttpSession中

1、下載kaptcha。

    http://code.google.com/p/kaptcha/downloads/list

2、新建一個Web項目,並將下載壓縮包中的kaptcha-2.3.2.jar放在項目的WEB-INF/lib目錄下。

3、配置web.xml文件。

使用kaptcha可以方便的配置:

•驗證碼的字體
•驗證碼字體的大小
•驗證碼字體的字體顏色
•驗證碼內容的范圍(數字,字母,中文漢字!)
•驗證碼圖片的大小,邊框,邊框粗細,邊框顏色
•驗證碼的干擾線(可以自己繼承com.google.code.kaptcha.NoiseProducer寫一個自定義的干擾線)
•驗證碼的樣式(魚眼樣式、3D、普通模糊……當然也可以繼承com.google.code.kaptcha.GimpyEngine自定義樣式)

配置

 代碼如下 復制代碼

kaptcha.border  是否有邊框  默認為true  我們可以自己設置yes,no
kaptcha.border.color   邊框顏色   默認為Color.BLACK
kaptcha.border.thickness  邊框粗細度  默認為1
kaptcha.producer.impl   驗證碼生成器  默認為DefaultKaptcha
kaptcha.textproducer.impl   驗證碼文本生成器  默認為DefaultTextCreator
kaptcha.textproducer.char.string   驗證碼文本字符內容范圍  默認為abcde2345678gfynmnpwx
kaptcha.textproducer.char.length   驗證碼文本字符長度  默認為5
kaptcha.textproducer.font.names    驗證碼文本字體樣式  默認為new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize)
kaptcha.textproducer.font.size   驗證碼文本字符大小  默認為40
kaptcha.textproducer.font.color  驗證碼文本字符顏色  默認為Color.BLACK
kaptcha.textproducer.char.space  驗證碼文本字符間距  默認為2
kaptcha.noise.impl    驗證碼噪點生成對象  默認為DefaultNoise
kaptcha.noise.color   驗證碼噪點顏色   默認為Color.BLACK
kaptcha.obscurificator.impl   驗證碼樣式引擎  默認為WaterRipple
kaptcha.word.impl   驗證碼文本字符渲染   默認為DefaultWordRenderer
kaptcha.background.impl   驗證碼背景生成器   默認為DefaultBackground
kaptcha.background.clear.from   驗證碼背景顏色漸進   默認為Color.LIGHT_GRAY
kaptcha.background.clear.to   驗證碼背景顏色漸進   默認為Color.WHITE
kaptcha.image.width   驗證碼圖片寬度  默認為200
kaptcha.image.height  驗證碼圖片高度  默認為50


驗證碼實例

 代碼如下 復制代碼

<?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">
  <display-name></display-name>   
 
    <!-- kaptcha驗證碼配置 -->
    <servlet>
        <!-- 生成圖片的Servlet -->
        <servlet-name>Kaptcha</servlet-name>
        <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
       
        <!-- 是否有邊框-->
        <init-param>
            <param-name>kaptcha.border</param-name>
            <param-value>no</param-value>
        </init-param>   
        <!-- 字體顏色 -->
        <init-param>
            <param-name>kaptcha.textproducer.font.color</param-name>
            <param-value>red</param-value>
        </init-param>
        <!-- 圖片寬度 -->
        <init-param>
            <param-name>kaptcha.image.width</param-name>
            <param-value>135</param-value>
        </init-param>
        <!-- 使用哪些字符生成驗證碼 -->
        <init-param>
            <param-name>kaptcha.textproducer.char.string</param-name>
            <param-value>ACDEFHKPRSTWX345679</param-value>
        </init-param>
        <!-- 圖片高度 -->
        <init-param>
            <param-name>kaptcha.image.height</param-name>
            <param-value>50</param-value>
        </init-param>
        <!-- 字體大小 -->
        <init-param>
            <param-name>kaptcha.textproducer.font.size</param-name>
            <param-value>43</param-value>
        </init-param>
        <!-- 干擾線的顏色 -->
        <init-param>
            <param-name>kaptcha.noise.color</param-name>
            <param-value>black</param-value>
        </init-param>
        <!-- 字符個數 -->
        <init-param>
            <param-name>kaptcha.textproducer.char.length</param-name>
            <param-value>4</param-value>
        </init-param>
        <!-- 使用哪些字體 -->
        <init-param>
            <param-name>kaptcha.textproducer.font.names</param-name>
            <param-value>Arial</param-value>
        </init-param>       
    </servlet>
    <!-- 映射的url -->
    <servlet-mapping>
        <servlet-name>Kaptcha</servlet-name>
        <url-pattern>/Kaptcha.jpg</url-pattern>
    </servlet-mapping>
   

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

顯示驗證碼的頁面index.jsp

 代碼如下 復制代碼

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>驗證碼</title>
<script type="text/javascript">
    //點擊切換驗證碼
    function changeVerifyCode(img){
        img.src = "Kaptcha.jpg?"+Math.floor(Math.random()*100);   
    }
</script>
</head>
<body>

    <p>
    <form action="result.jsp">
        <table>
            <tr>
                <td>   
                    &nbsp;
                </td>
                <td>
                    <img src="Kaptcha.jpg" onclick="changeVerifyCode(this)" style="cursor: pointer;">
                </td>
            </tr>
            <tr>
                <td>   
                    請輸入驗證碼:
                </td>
                <td>
                    <input type="text" name="verifyCode">
                </td>
            </tr>
            <tr>
                <td>   
                    &nbsp;
                </td>
                <td>
                    <input type="submit" value="提交">
                </td>
            </tr>
           
           
        </table>
    </form>   
</body>
</html>

1.kaptcha提供了很好的可擴展性,而且擴展的方式也很簡單,只需要實現相關接口,然後把我們自定義的對象添加到配置項裡面就可以了,如Producer,WordRenderer,GimpyEngine,BackgroundProducer,NoiseProducer,TextProducer這些接口,我們可以隨意的擴展。

2.關於對生成的驗證碼進行加噪點,一些干擾因素,kaptcha也提供了許多現成的filter供選擇,它自己默認的干擾因素生成類WaterRipple就是由RippleFilter,WaterFilter兩個filter組成的,這些filter實現了各種對文本樣式變化處理,位於com.jhlabs.image package下

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved