锁定老帖子 主题:java自动生成验证码插件-kaptcha
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-09-10
最后修改:2010-09-13
今天无意间发现了一个很好用的验证码插件,java版的,很不错的一个插件,只用简单的在web.xml中设置几个属性,一个很漂亮的验证码就出来了。其他的参数都可以自己设置,最牛的就是提供了接口,可以自己定义哦。 怎么样,还不错吧,这个图是我设置长宽后生成的,有点点大,不过没关系,这个可以自己设置的。
多大概设置了边框,字体,个数,字的大小,长,宽,中文接口等这几个属性,然后很简单的就生成了这样一个验证码,呵呵,不错,很简单。 看看配置: <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.randcode.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.session.key</param-name> <param-value>code</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> 呵呵,还简洁吧。这个插件自带了个中文生成类,但是这个类做得很死,中文是手动输入进去的,我的天,太死了,然后leo就找啊找,发现API中有一个自定义接口,哈哈,太好了,正好我之前有一个生成中文的程序,直接COPY过来,写了个简单的类,测试,成功了,就是上面发的图。接口是这个:
<init-param> <param-name>kaptcha.textproducer.impl</param-name> <param-value>com.randcode.ChineseText</param-value> </init-param> 如果有朋友不知道怎么用的,可以联系我。
生成中文的代码:
package com.randcode; import java.util.Random; import com.google.code.kaptcha.text.TextProducer; import com.google.code.kaptcha.util.Configurable; public class ChineseText extends Configurable implements TextProducer{ public String getText() { int length = getConfig().getTextProducerCharLength(); 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; } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-09-11
恩 我现在就测试测试
|
|
返回顶楼 | |
发表时间:2010-09-11
最后修改:2010-09-11
话说,干扰线太少了点吧
PS:楼主没有说是什么插件 |
|
返回顶楼 | |
发表时间:2010-09-11
zhao103804 写道
话说,干扰线太少了点吧
PS:楼主没有说是什么插件
我说了的,可以自己定义,你可以看看百度的验证码,看看有几条线
还有,插件我在标题里面写了的哦。。 |
|
返回顶楼 | |
发表时间:2010-09-12
使用jcaptcha 很好用,最新的版本配置很简单,几乎不需要什么配置就可以了。只需要在web.xml中配置: <servlet> <servlet-name>jcaptcha</servlet-name> <servlet-class>com.octo.captcha.servlet.image.SimpleImageCaptchaServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>jcaptcha</servlet-name> <url-pattern>/jcaptcha.jpg</url-pattern> </servlet-mapping> 前台使用:
<form action="submit.action"> ... <img src="jcaptcha.jpg" /> <input type="text" name="jcaptcha" value="" /> ... </form>并且是彩色的验证码:
|
|
返回顶楼 | |
发表时间:2010-09-12
额,,,,,楼主能给你的那个生成中文的代码好吗?
小弟在这里谢谢 |
|
返回顶楼 | |
发表时间:2010-09-13
咋都不知道google嘛,楼主都说了名字了------kaptcha
正巧前边项目里用过,不错的,也推荐一下。 用起来很简单,按默认设置的话,不需要编写代码,只要在web.xml里配置个servlet就可以了。 它的强大之处就是定义了很多参数,可以根据自己的需要进行验证码定制。 |
|
返回顶楼 | |
发表时间:2010-09-13
恩,是不错啊。。。。谢谢了啊
|
|
返回顶楼 | |
发表时间:2010-09-13
lotnhiro 写道
额,,,,,楼主能给你的那个生成中文的代码好吗?
小弟在这里谢谢
package com.randcode; import java.util.Random; import com.google.code.kaptcha.text.TextProducer; import com.google.code.kaptcha.util.Configurable; public class ChineseText extends Configurable implements TextProducer{ public String getText() { int length = getConfig().getTextProducerCharLength(); 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; } }
|
|
返回顶楼 | |
发表时间:2010-09-13
可以不可以把你那个生成中文的东西发出来看看啊
|
|
返回顶楼 | |