java程序识别验证码? 最近需要做一个项目、有一特殊需求:就是把传统的人工注册方式改为机器(程序)注册、但很多注册页面都加有验证码。请教一下高手和前辈:如何才能通过程序自动读取(识别)验证码?开发环境 (JDK、Tomcat)我的QQ号码:544588699我的Msn 号:[email protected] 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没戏,那是一个梦想。你看看Google和微软的注册码,眼睛都分辨不行,你还指望机器能识别! OpenCV 去看看这个项目吧,据说"绿坝·花季护航"就是使用这个来识别,拦截黄色图像的. 从服务器端去解决吧。比如开个后门,比如:如果输入是“!@#$%^&*()_+|”就认为是正确的。回头再把后门关了就行了 ,哈哈。 除非你能拦截到他服务器产生的验证码,然后获取,否则就是ORC扫描,但目前扫描还是不太准确 用个 servlet 生成的啦!一般都这么做的。 <%@ page autoFlush="false" import="java.awt.*,java.awt.image.*,com.sun.image.codec.jpeg.*,java.util.*" pageEncoding="GBK"%><%//set Chinese Char request.setCharacterEncoding("GBK");response.setCharacterEncoding("GBK");response.setContentType("text/html; charset=GBK");%><%String chose="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";char display[]={'0',' ','0',' ','0',' ','0'},ran[]={'0','0','0','0'},temp;Random rand=new Random();for(int i=0;i<4;i++){ temp=chose.charAt(rand.nextInt(chose.length())); display[i*2]=temp; ran[i]=temp; } String random=String.valueOf(display);session.setAttribute("random",String.valueOf(ran)); %><% out.clear(); response.setContentType("image/jpeg"); response.addHeader("pragma","NO-cache"); response.addHeader("Cache-Control","no-cache"); response.addDateHeader("Expries",0); int width=65, height=22; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); //以下填充背景颜色 g.setColor(Color.white); g.fillRect(0, 0, width, height); //设置字体颜色 g.setColor(Color.blue); Font font=new Font("Arial",Font.PLAIN,15); g.setFont(font); g.drawString(random,5,20); g.dispose(); ServletOutputStream outStream = response.getOutputStream(); JPEGImageEncoder encoder =JPEGCodec.createJPEGEncoder(outStream); encoder.encode(image); outStream.close(); out.clear(); out = pageContext.pushBody(); %>在html中<script type="text/javascript"> var i=0; function aa(mm){ mm.src="/iCharms/web/allied/checkCode2.jsp?i="+i; i++; }</script><html:text styleId="code" property="code" styleClass="inputL"/><img src="/iCharms/web/allied/checkCode2.jsp" onclick="aa(this);" style="height:20px;" align="bottom"/>在actomForm中设置一个属性 ,(属性名和文本框的名称一致)。 private String code; 在action中进行判断输入的验证是否正确。//获得验证码String code=(String)request.getSession().getAttribute("chechCode2");//判断 if(!code.equalsIgnoreCase(alliedForm.getCode())){} 靠 验证码不是你们想的那样的 是随机的生成几个数字 然后把这几个数字 传给java的 一个图片生成类生成一张图片 ,你要做的就是把这几个数字记下来 看看 他输入的和你记下的数字 一样不 一样而已,比较的还是字符串,你以为是图片啊。不知道你们怎么想的,你以为是扫描啊 ,那有那么高科技。我晕!!!楼主,记得给分啊 菜鸟的过滤器未能解决jsp中文乱码问题 求大侠帮忙 <logic:iterate>取值 打印的乱码问题?请教高手 struts的logic标签的问题 httpClient下访问https站点证书的绑定问题 网站登录页面成了空壳子!!! strut 严重: Servlet.service() for servlet SpringServlet threw exception 急!!请问怎么实现在框架上放一个按钮能控制缩放框架 求教:问题简单,分数高。 jsp导出excel问题 struts2校验框架问题
你看看Google和微软的注册码,眼睛都分辨不行,你还指望机器能识别!
//set Chinese Char
request.setCharacterEncoding("GBK");
response.setCharacterEncoding("GBK");
response.setContentType("text/html; charset=GBK");
%>
<%
String chose="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";char display[]={'0',' ','0',' ','0',' ','0'},ran[]={'0','0','0','0'},temp;Random rand=new Random();for(int i=0;i<4;i++)
{ temp=chose.charAt(rand.nextInt(chose.length())); display[i*2]=temp; ran[i]=temp;
}
String random=String.valueOf(display);session.setAttribute("random",String.valueOf(ran));
%>
<% out.clear();
response.setContentType("image/jpeg");
response.addHeader("pragma","NO-cache");
response.addHeader("Cache-Control","no-cache");
response.addDateHeader("Expries",0);
int width=65, height=22;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
//以下填充背景颜色
g.setColor(Color.white);
g.fillRect(0, 0, width, height);
//设置字体颜色
g.setColor(Color.blue);
Font font=new Font("Arial",Font.PLAIN,15);
g.setFont(font);
g.drawString(random,5,20);
g.dispose();
ServletOutputStream outStream = response.getOutputStream();
JPEGImageEncoder encoder =JPEGCodec.createJPEGEncoder(outStream);
encoder.encode(image);
outStream.close();
out.clear();
out = pageContext.pushBody();
%>在html中
<script type="text/javascript">
var i=0;
function aa(mm){
mm.src="/iCharms/web/allied/checkCode2.jsp?i="+i;
i++;
}
</script><html:text styleId="code" property="code" styleClass="inputL"/>
<img src="/iCharms/web/allied/checkCode2.jsp" onclick="aa(this);" style="height:20px;" align="bottom"/>
在actomForm中设置一个属性 ,(属性名和文本框的名称一致)。
private String code;
在action中进行判断输入的验证是否正确。
//获得验证码
String code=(String)request.getSession().getAttribute("chechCode2");
//判断
if(!code.equalsIgnoreCase(alliedForm.getCode())){
}
楼主,记得给分啊