为增加验证码识别的难度,部分网站采用中文\数字英文\简单计算题等混合验证码样式.但因各样式字形差异较大,各样式具有明显特征.通过简单处理可以将其区别分类出来.
以以下验证码图片为例:

观察可知,英文数字类型像素处于右侧边缘,因此只需判断最右一列像素颜色即可将英文数字验证码过滤出来.

public byte[] ReadFile(string imgpath)
{
FileStream fs = new FileStream(imgpath, FileMode.Open);
int filelength = 0;
filelength=(int) fs.Length; //获得文件长度
Byte[] fl = new Byte[filelength]; //建立一个字节数组
fs.Read(fl, 0, filelength); //按字节流读取
fs.Close();
return fl;
}

public Bitmap ByteToImage(byte[] buffer)
{
MemoryStream ms = new MemoryStream(buffer);
Bitmap img = (Bitmap)System.Drawing.Image.FromStream(ms);
ms.Close();
return img;
}

public bool IsSimpleVercode(byte[] buffer)
{
using (Bitmap img = ByteToImage(buffer))
{
int w = img.Width; //取图片宽度;
int h = img.Height; //取图片高度;
for (int i = 1; i < h; i++)
{
Color p = img.GetPixel(w - 1, i);
uint argb = (uint)p.ToArgb();
if (argb != 0xffff0000 && argb != 0xffffffff && argb != 0xffd3d3d3) //排除3种边缘颜色
{
return true;
}
}
return false;
}
}