免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2463 | 回复: 0
打印 上一主题 下一主题

java自动生成验证码插件-kaptcha [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-08 07:34 |只看该作者 |倒序浏览
转自 http://www.javaeye.com/topic/760483

今天无意间发现了一个很好用的验证码插件,java版的,很不错的一个插件,只用简单的在web.xml中设置几个属性,一个很漂亮的验证码就出来了。其他的参数都可以自己设置,最牛的就是提供了接口,可以自己定义哦。

        先发个图来看看:



        怎么样,还不错吧,这个图是我设置长宽后生成的,有点点大,不过没关系,这个可以自己设置的。

        多大概设置了边框,字体,个数,字的大小,长,宽,中文接口等这几个属性,然后很简单的就生成了这样一个验证码,呵呵,不错,很简单。

        看看配置:
  1. <init-param>  
  2.             <param-name>kaptcha.border</param-name>  
  3.             <param-value>yes</param-value>  
  4.         </init-param>  
  5.         <init-param>  
  6.             <param-name>kaptcha.border.color</param-name>  
  7.             <param-value>105,179,90</param-value>  
  8.         </init-param>  
  9.         <init-param>  
  10.             <param-name>kaptcha.textproducer.impl</param-name>  
  11.             <param-value>com.randcode.ChineseText</param-value>  
  12.         </init-param>  
  13.   
  14.         <init-param>  
  15.             <param-name>kaptcha.textproducer.font.color</param-name>  
  16.             <param-value>black</param-value>  
  17.         </init-param>  
  18.         <init-param>  
  19.             <param-name>kaptcha.image.width</param-name>  
  20.             <param-value>500</param-value>  
  21.         </init-param>  
  22.         <init-param>  
  23.             <param-name>kaptcha.image.height</param-name>  
  24.             <param-value>300</param-value>  
  25.         </init-param>  
  26.         <init-param>  
  27.             <param-name>kaptcha.textproducer.font.size</param-name>  
  28.             <param-value>90</param-value>  
  29.         </init-param>  
  30.         <init-param>  
  31.             <param-name>kaptcha.session.key</param-name>  
  32.             <param-value>code</param-value>  
  33.         </init-param>  
  34.         <init-param>  
  35.             <param-name>kaptcha.textproducer.char.length</param-name>  
  36.             <param-value>4</param-value>  
  37.         </init-param>  
  38.         <init-param>  
  39.             <param-name>kaptcha.textproducer.font.names</param-name>  
  40.             <param-value>宋体,楷体,微软雅黑</param-value>  
  41.         </init-param>
复制代码
呵呵,还简洁吧。这个插件自带了个中文生成类,但是这个类做得很死,中文是手动输入进去的,我的天,太死了,然后leo就找啊找,发现API中有一个自定义接口,哈哈,太好了,正好我之前有一个生成中文的程序,直接COPY过来,写了个简单的类,测试,成功了,就是上面发的图。接口是这个:
  1. <init-param>     
  2.      <param-name>kaptcha.textproducer.impl</param-name>     
  3.      <param-value>com.randcode.ChineseText</param-value>     
  4. </init-param>
复制代码
如果有朋友不知道怎么用的,可以联系我。
生成中文的代码:
  1. package com.randcode;

  2. import java.util.Random;

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

  5. public class ChineseText extends Configurable implements TextProducer{

  6.         public String getText() {
  7.                 int length = getConfig().getTextProducerCharLength();
  8.                 String finalWord="",firstWord="";
  9.                 int tempInt=0;
  10.                 String[] array={
  11.                                 "0","1","2","3",
  12.                                 "4","5","6","7",
  13.                                 "8","9","a","b",
  14.                                 "c","d","e","f"};
  15.                
  16.                 Random rand = new Random();
  17.                
  18.                 for(int i=0;i<length;i++){
  19.                         switch(rand.nextInt(3)){
  20.                                 case 1:
  21.                                                 tempInt=rand.nextInt(26)+65;
  22.                                                 firstWord=String.valueOf((char)tempInt);
  23.                                                 break;
  24.                                 case 2:
  25.                                                 int r1,r2,r3,r4;
  26.                                                 String strH,strL;//high&low
  27.                                                 r1=rand.nextInt(3)+11; //前闭后开[11,14)
  28.                                                 if(r1==13){
  29.                                                         r2=rand.nextInt(7);
  30.                                                 }else{
  31.                                                         r2=rand.nextInt(16);
  32.                                                 }
  33.                                                
  34.                                                 r3=rand.nextInt(6)+10;
  35.                                                 if(r3==10){
  36.                                                         r4=rand.nextInt(15)+1;
  37.                                                 }else if(r3==15){
  38.                                                         r4=rand.nextInt(15);
  39.                                                 }else{
  40.                                                         r4=rand.nextInt(16);
  41.                                                 }
  42.                                                
  43.                                                 strH=array[r1]+array[r2];
  44.                                                 strL=array[r3]+array[r4];
  45.                                                
  46.                                                 byte[] bytes=new byte[2];
  47.                                                 bytes[0]=(byte)(Integer.parseInt(strH,16));
  48.                                                 bytes[1]=(byte)(Integer.parseInt(strL,16));
  49.                                                
  50.                                                 firstWord=new String(bytes);
  51.                                                 break;
  52.                                 default:
  53.                                                 tempInt=rand.nextInt(10)+48;
  54.                                                 firstWord=String.valueOf((char)tempInt);
  55.                                                 break;
  56.                         }
  57.                         finalWord+=firstWord;
  58.                 }
  59.                 return finalWord;
  60.         }
  61. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP