内容导航:把要识别的图片上的数字,那就认为这个像素是黑色,Color getRandColor(int fc,int y = (height)
{image}
一 、用java写的验证码识别技术原理
<%@ page contentType="image/jpeg" import=".,.,.,." %>
<%!
Color getRandColor(int fc,int bc){//给定范围获得随机颜色
Random random = new Random();
if(fc>255) fc=255;
if(bc>255) bc=255;
int r=fc+(bc-fc);
int g=fc+(bc-fc);
int b=fc+(bc-fc);
return new Color(r,g,b);
}
%>
<%
//设置页面不缓存
("Pragma","No-cache");
("Cache-Control","no-cache");
ader("Expires", 0);// 在举扒樱内存中创建图象
int width=60, height=20;
BufferedImage image = new BufferedImage(width, height, _INT_RGB);// 获取图形上下文
Graphics g = cs();//生成随机类
Random random = new Random();// 设定背景色
(getRandColor(200,250));
(0, 0, width, height);//设定字体
(new Font("Times New Roman",,18));//画边框
//(new Color());
//(0,0,width-1,height-1);
// 随机产生155条干扰线 ,使图象中的认证码不易被其它程序探此誉测到
(getRandColor(160,200));
for (int i=0;i<155;i++)
{
int x = (width);
int y = (height);
int xl = (12);
int yl = (12);
(x,y,x+xl,y+yl);
}// 取随机产生的认证码(4位数字)
//String rand = ter("rand");
//rand = (0,("."));
String sRand="";
for (int i=0;i<4;i++){
String rand=((10));
sRand+=rand;
// 将认证码显示到图象中
(new Color(20+(110),20+(110),20+(110)));//调用函数出来的颜色相同,可能是因为种正丛子太接近,所以只能直接生成
g(rand,13*i+6,16);
}// 将认证码存入SESSION
ute("rand",sRand);
// 图象生效
();// 输出图象到页面
(image, "JPEG", Stream());
();
out = ();
%>
二、使用java如何识别验证码中的文字
自己看~~~~~~~肯定有真实数据对应 ,你还识别文字呢1、在图形验证码程序的生成过程中(一般中servlet中生成) ,使用ute("code",yourcode);
2 、在jsp页面接收是用ute("code")即可
希望能够帮到你,
如若你有不清楚的,欢迎探讨。
淘宝会员:宜人家园
三 、java实现验证码的自动识别
方式比较多 ,用一个二维数组存放,如a[5][5]={{,,,,},{"1212","1233","2323","","郑拆并"}},可以动态的生成一个小于5的数字 ,直接把生成的数字和下标对应,在和后面的的字御戚符串比较喊迹就可以自动验证了
四、用Java做一个验证码识别的程序要识别的验证码httpgroupbjchina
验证码识别,费力效果差 ,除非非常简单的图片,否则极难识别,而让游且验证码图片的代码 ,人家只需要稍微弄复杂点,识别的复杂度直线上升,成功率直线下降 。像hotmail, google, yahoo那种就直接放弃 ,
不过像这种简单的 ,你可以试试,用模式匹配:
例如单个数字大小是16 * 16像素, 那就划分成16*16块 ,每个块1个像素,编号,特征就是a[0][0] - 白 , a[0][1] - 白, a[0][2]黑空滑念……这种,存下来,把要识别的图片上的数字 ,也这样处理,然后跟保存下来的特征码进行匹配就行了,看看有多少是一样的 ,超过50%就可以认为找到了,或者把阈值设更低点
难点在于要识别的图片上面有干扰点,要排除 ,以你给出的图片来说 ,可以这样:
1. 先统一黑白:如果一个像素跟白色很接近,就认为是白色,否则认为是黑色。(如果底色是随机的 ,那就把区域色块最大的认为是白斗困色,其他的黑色)
2. 每个像素周围有8个像素,计算出这个区域内的平均灰度 ,例如这9个点中超过4个是黑色,那就认为这个像素是黑色