kaptcha 例子

kaptcha  简单例子 与 产生中文字符

 kaptcha  是一个产生 随机 字符的 java框架,用于输入 验证  用了工厂模式与 , 装饰者,

 现在提供一个 产生中文的 验证码 只要 产生字符的 类

ChineseText extends Configurable implements TextProducer

 实现 getText 方法, Configurable 类中的 getConfig 获得 配置信息 Config 类的信息

 比如 产生字符的长度  getConfig  中的 getTextProducerCharLength 方法,

   下面是 kaptcha  框架  的 getTextProducerCharLength 方法

 

 public int getTextProducerCharLength()
 {
    String paramName = "kaptcha.textproducer.char.length";
    String paramValue = this.properties.getProperty(paramName);
    return this.helper.getPositiveInt(paramName, paramValue, 5);
  }

 2 写一个 现在提供一个 产生中文的 验证码 只要 产生字符的 类 ChineseText

package com.nbw.common.util;
import java.util.Random;

import com.google.code.kaptcha.text.TextProducer;
import com.google.code.kaptcha.util.Configurable;

/**
 *  随机产生字符,包括汉字 length 表示 长度
 * @author qcy
 *
 */
public class ChineseText extends Configurable implements TextProducer{

	public String getText() {
		int length = getConfig().getTextProducerCharLength();
		//int length = 4;
		String finalWord="",firstWord="";
		int tempInt=0;
		String[] array={
				"0","1","2","3",
				"4","5","6","7",
				"8","9","a","b",
				"c","d","e","f"};
		
		Random rand = new Random();
		
		for(int i=0;i<length;i++){
			switch(rand.nextInt(3)){
				case 1:
						tempInt=rand.nextInt(26)+65;
						firstWord=String.valueOf((char)tempInt);
						break;
				case 2:
						int r1,r2,r3,r4;
						String strH,strL;// high&low
						r1=rand.nextInt(3)+11; // 前闭后开[11,14)
						if(r1==13){
							r2=rand.nextInt(7);
						}else{
							r2=rand.nextInt(16);
						}
						
						r3=rand.nextInt(6)+10;
						if(r3==10){
							r4=rand.nextInt(15)+1;
						}else if(r3==15){
							r4=rand.nextInt(15);
						}else{
							r4=rand.nextInt(16);
						}
						
						strH=array[r1]+array[r2];
						strL=array[r3]+array[r4];
						
						byte[] bytes=new byte[2];
						bytes[0]=(byte)(Integer.parseInt(strH,16));
						bytes[1]=(byte)(Integer.parseInt(strL,16));
						
						firstWord=new String(bytes);
						break;
				default:
						tempInt=rand.nextInt(10)+48;
						firstWord=String.valueOf((char)tempInt);
						break;
			}
			finalWord+=firstWord;
		}
		return finalWord;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ChineseText ct = new ChineseText();
		System.out.print(ct.getText());

	}
}

    3 写一个 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>Kaptcha</servlet-name>
		<servlet-class>
			com.google.code.kaptcha.servlet.KaptchaServlet
		</servlet-class>
		<init-param>
			<param-name>kaptcha.border</param-name>
			<param-value>yes</param-value>
		</init-param>
		<init-param>
			<param-name>kaptcha.border.color</param-name>
			<param-value>105,179,90</param-value>
		</init-param>
		<init-param>
			<param-name>kaptcha.textproducer.impl</param-name>
			<param-value>com.nbw.common.util.ChineseText</param-value>
		</init-param>

		<init-param>
			<param-name>kaptcha.textproducer.font.color</param-name>
			<param-value>black</param-value>
		</init-param>
		<init-param>
			<param-name>kaptcha.image.width</param-name>
			<param-value>500</param-value>
		</init-param>
		<init-param>
			<param-name>kaptcha.image.height</param-name>
			<param-value>300</param-value>
		</init-param>
		<init-param>
			<param-name>kaptcha.textproducer.font.size</param-name>
			<param-value>90</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>宋体,楷体,微软雅黑</param-value>
		</init-param>
	</servlet>
	<!--  这个名字 必须与前台一致 -->
	<servlet-mapping>
		<servlet-name>Kaptcha</servlet-name>
		<url-pattern>/Kaptcha.jpg</url-pattern>
	</servlet-mapping>

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

 

 4 前台展示的 页面KaptchaExample.jsp

   

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<%@ page language="java" contentType="text/html; charset=UTF-8"%>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Kaptcha Example</title>
		<script type="text/javascript">
		 
		</script>
	</head>
	<body>
		<h2>Kaptcha Example</h2>
		<%
			String c = (String) session
					.getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
			String parm = (String) request.getParameter("kaptchafield");

			out.println("Parameter: " + parm + " - Session Key: " + c + " : ");

			if (c != null && parm != null) {
				if (c.equals(parm)) {
					out.println("<b>true</b>");
				} else {
					out.println("<b>false</b>");
				}
			}
		%>
		<table>
			<tr>
				<td>
					<img src="Kaptcha.jpg" style="width:150px;height:30px" alt="看不清楚,请点击图片" title="看不清楚,请点击图片">
				</td>
			</tr>
			<tr>
				<td valign="top">
					<form method="POST">
						<br>
						sec code:
						<input type="text" name="kaptchafield">
						<br />
						<input type="submit" name="submit">
					</form>
				</td>
			</tr>
		</table>
	</body>
</html>

   

5 good luck !



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值