论坛首页 Java版 Tomcat

交流:如何实现web开发中不同字符方向验证码

浏览 1980 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2007-01-24
在web开发中,对于注册,登陆功能我们都会实现一个验证码的功能,并且验证的功能大家也都知道,我就这里不废话了。

验证一般的实现都比较简单,基本上都是在服务器端随机产生带有干扰点的背景图,
然后在背景片上画出随机码,随机码可以是数字,字母或者汉字等的组合。
基本上,这样一个验证码已经满足网站的基本需求了,

  在使用Java 的Graphics 在背景图上画验证码时,画出来的效果字符(颜色可以不一样)都是垂直整齐的,再变化一下也就是字符可以在垂直方向上不对齐,但是我在淘宝网,新浪以及一些大型网站看到的验证码都是每一次刷新都随机产生不同方向字符(颜色暂且不提)。我也很想实现这样的效果,但是研究了一下Graphics的API,在画字符的方法上只能设置画字符时候起始位置的坐标,根本就不能够改变文字的方向。

研究Graphics 其他的API (画圆,椭圆,线等)也没有任何的帮助。按照我现在的愚笨的想法:
如果要实现不同文字方向的验证码,是不是要把一个字符拆成N个点,然后来逐渐画出这些点形成文字,
但是这样的话,我们岂不是要事先找出所有随机产生的每一个验证码拆成点的规则,这样的话。。。。。。
太不现实了。
   
最后更新时间:2007-01-24
不知道图片是否能旋转?如果可以,每写一个字母,就旋转一个随机角度,再写第二个。这样就可以了。
   
0 请登录后投票
最后更新时间:2007-01-24
很讨厌验证码。特别是混淆的模糊不清的。
无非是想防止暴力登陆破解密码。
限制连续错误登陆次数其实也可以达到目的,还对使用者友好些。
   
0 请登录后投票
最后更新时间:2007-01-24
也是,有些太模糊了,一次难以搞对。
   
0 请登录后投票
最后更新时间:2007-01-24
File _file = new File("E:/temp/a.jpg"); 
Image src = javax.imageio.ImageIO.read(_file);
BufferedImage tag = new BufferedImage(src.getWidth(null),src.getHeight(null),BufferedImage.TYPE_INT_RGB);
Graphics2D g2=tag.createGraphics();
g2.drawImage(src, 0, 0,src.getWidth(null), src.getHeight(null),null);
Font font = new Font("宋体",Font.BOLD,15);			
g2.setFont(font);
int x = 5;
int y = 20;
int random = 0;
double[] rotates = new double[]{-0.25, 0, 0.25, 0, -.25};
for(int i=0; i<5; i++){
     random = Double.valueOf(Math.random()*20).intValue();
     g2.rotate(rotates[i] , x , y );//旋转
     g2.drawString(String.valueOf(i), x + i*font.getSize(), y + random);
}			
FileOutputStream out=new FileOutputStream("E:/temp/a1.jpg"); 
JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam( tag );		
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag,jep); 
out.flush();
out.close(); 
   
0 请登录后投票
最后更新时间:2007-07-02
看了多个“图片验证码”的实现。

不过都有个问题,
假设我在“login.jsp”里面有用户登录的表单,表单里面使用了验证码,
“login.jsp”的表单提交后,提交到“loginAction.do”来处理用户登录。

我想在“login.jsp”里面用javascript对验证码进行客户端验证,
但是,在“login.jsp”页面里,我从session取到的验证码并不是当前页面此时的验证码,
而是上一次生成的验证码。

(当然,在“loginAction.do”里面进行服务器端验证是可以的,从session取到的验证码是“login.jsp”页面此时的验证码。)
   
0 请登录后投票
最后更新时间:2007-07-02
edgeloner 写道
很讨厌验证码。特别是混淆的模糊不清的。
无非是想防止暴力登陆破解密码。
限制连续错误登陆次数其实也可以达到目的,还对使用者友好些。

目的是不是防止暴力尝试,而是防止OCR字符识别
对于比较端正,噪音比较少的字符,现在的OCR识别几乎100%,一次就能成功通过验证
所以要加大噪音,并做些变形处理
   
0 请登录后投票
论坛首页 Java版 Tomcat

跳转论坛:
JavaEye推荐