本文所讲的技术只是验证码识别的初级技术,只能识别一些简单的验证码,比如
符合下列部分条件的:字体工整、位置固定、颜色统一、没有干扰点、背静单纯。
程序是通过抓特征点来达到识别目的。图片由一个一个的点(像素)组成,点的颜
色变化就组成了我们看见的图片,呈现一个图象就是那几个点按照一定的顺序排
列而已。
这样识别率100%,速度极快识别一个的过程一般在几十毫秒级别内,如果要追求
更快的速度,使用API直接操作图形,速度更快。
而本程序只针对网站http://www.51.la/login.asp验证码签别
其图片Url是: http://www.51.la/user/vcode.asp
由于本程序写得比较差劲,请见谅!
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net; namespace getCheckCode
{
public partial class main : Form
{
HttpWebRequest RQ;
HttpWebResponse RP;
FileWebRequest FQ;
FileWebResponse FP;
private static Bitmap bmp;
string[] color=new string[60];
string[] color0 = new string[60];
string[] color1 = new string[60];
string[] color2 = new string[60];
string[] color3 = new string[60];
string[] color4 = new string[60];
string[] color5 = new string[60];
string[] color6 = new string[60];
string[] color7 = new string[60];
string[] color8 = new string[60];
string[] color9 = new string[60];
{
InitializeComponent();
getImage(txtUrl.Text.Trim().ToString());
pbimage.Image = bmp;
for (int i = 2; i <= 34; i = i + 10)
{
getColor(i, i + 5);
initialization();
lblresult.Text += getNum(0);
}
}
/// 获取网络图片
/// </summary>
/// <param name="url"></param>
public void getImage(string url)
{
RQ = (HttpWebRequest)HttpWebRequest.Create(url);
RQ.CookieContainer = new CookieContainer();
RP = (HttpWebResponse)RQ.GetResponse();
bmp = new Bitmap(RP.GetResponseStream());
}
/// 获取本地图片
/// </summary>
/// <param name="url"></param>
public void getFileImage(string url)
{
FQ = (FileWebRequest)FileWebRequest.Create(url);
FP=(FileWebResponse)FQ.GetResponse();
bmp=new Bitmap(FP.GetResponseStream());
}
{
lblresult.Text = " ";
getImage(txtUrl.Text.Trim().ToString());
pbimage.Image = bmp;
for (int i = 2; i <= 34; i=i+10)
{
getColor(i, i+5);
initialization();
lblresult.Text += getNum(0);
}
/// 初始化数组
/// </summary>
/// <param name="begin"></param>
/// <param name="end"></param>
private void getColor(int begin,int end)
{
int j = 0;
for (int i = begin; i <= end; i++)
{
for (int k = 0; k <= 9; k++)
{
color[j] = bmp.GetPixel(i, k).ToString();
j++;
}
}
}
/// 根据特征来判断数字
/// </summary>
/// <param name="begin"></param>
/// <returns></returns>
private string getNum(int begin)
{
int m=0;
string num="?";
for (int i = 0; i < 60; i++)
{
if (color[i] == color8[i])
{
m++;
}
}
if (m >= 16)
{
num = "8";
m = 0;
}
else
{
m = 0;
}
for (int i = 0; i < 60; i++)
{
if (color[i] == color7[i])
{
m++;
}
}
if (m >= 8)
{
num = "7";
m = 0;
}
else
{
m = 0;
}
for (int i = 0; i < 60; i++)
{
if (color[i] == color0[i])
{
m++;
}
}
if (m >= 8)
{
num = "0";
m = 0;
}
else
{
m = 0;
}
for (int i = 0; i < 60; i++)
{
if (color[i] == color6[i])
{
m++;
}
}
if (m >= 8)
{
num = "6";
m = 0;
}
else
{
m = 0;
}
for (int i = 0; i < 60; i++)
{
if (color[i] == color1[i])
{
m++;
}
}
if (m >= 8)
{
num = "1";
m = 0;
}
else
{
m = 0;
}
for (int i = 0; i < 60; i++)
{
if (color[i] == color2[i])
{
m++;
}
}
if (m >= 8)
{
num = "2";
m = 0;
}
else
{
m = 0;
}
for (int i = 0; i < 60; i++)
{
if (color[i] == color3[i])
{
m++;
}
}
if (m >= 8)
{
num = "3";
m = 0;
}
else
{
m = 0;
}
for (int i = 0; i < 60; i++)
{
if (color[i] == color4[i])
{
m++;
}
}
if (m >= 8)
{
num = "4";
m = 0;
}
else
{
m = 0;
}
for (int i = 0; i < 60; i++)
{
if (color[i] == color5[i])
{
m++;
}
}
if (m >= 8)
{
num = "5";
m = 0;
}
else
{
m = 0;
}
for (int i = 0; i < 60; i++)
{
if (color[i] == color9[i])
{
m++;
}
}
if (m >= 10)
{
num = "9";
m = 0;
}
else
{
m = 0;
}
}
/// 初始化数字的像素
/// </summary>
private void initialization()
{
//0
color0[1] = "Color [A=255, R=0, G=9, B=204]";
color0[5] = "Color [A=255, R=0, G=9, B=204]";
color0[8] = "Color [A=255, R=0, G=9, B=204]";
color0[20] = "Color [A=255, R=0, G=9, B=204]";
color0[29] = "Color [A=255, R=0, G=9, B=204]";
color0[39] = "Color [A=255, R=0, G=9, B=204]";
color0[51] = "Color [A=255, R=0, G=9, B=204]";
color0[58] = "Color [A=255, R=0, G=9, B=204]";
color1[1] = "Color [A=255, R=0, G=9, B=204]";
color1[9] = "Color [A=255, R=0, G=9, B=204]";
color1[11] = "Color [A=255, R=0, G=9, B=204]";
color1[20] = "Color [A=255, R=0, G=9, B=204]";
color1[21] = "Color [A=255, R=0, G=9, B=204]";
color1[28] = "Color [A=255, R=0, G=9, B=204]";
color1[29] = "Color [A=255, R=0, G=9, B=204]";
color1[49] = "Color [A=255, R=0, G=9, B=204]";
color2[1] = "Color [A=255, R=0, G=9, B=204]";
color2[8] = "Color [A=255, R=0, G=9, B=204]";
color2[9] = "Color [A=255, R=0, G=9, B=204]";
color2[17] = "Color [A=255, R=0, G=9, B=204]";
color2[26] = "Color [A=255, R=0, G=9, B=204]";
color2[35] = "Color [A=255, R=0, G=9, B=204]";
color2[44] = "Color [A=255, R=0, G=9, B=204]";
color2[52] = "Color [A=255, R=0, G=9, B=204]";
color3[2] = "Color [A=255, R=0, G=9, B=204]";
color3[7] = "Color [A=255, R=0, G=9, B=204]";
color3[10] = "Color [A=255, R=0, G=9, B=204]";
color3[24] = "Color [A=255, R=0, G=9, B=204]";
color3[34] = "Color [A=255, R=0, G=9, B=204]";
color3[43] = "Color [A=255, R=0, G=9, B=204]";
color3[52] = "Color [A=255, R=0, G=9, B=204]";
color3[58] = "Color [A=255, R=0, G=9, B=204]";
color4[5] = "Color [A=255, R=0, G=9, B=204]";
color4[13] = "Color [A=255, R=0, G=9, B=204]";
color4[22] = "Color [A=255, R=0, G=9, B=204]";
color4[31] = "Color [A=255, R=0, G=9, B=204]";
color4[40] = "Color [A=255, R=0, G=9, B=204]";
color4[41] = "Color [A=255, R=0, G=9, B=204]";
color4[47] = "Color [A=255, R=0, G=9, B=204]";
color4[49] = "Color [A=255, R=0, G=9, B=204]";
color5[0] = "Color [A=255, R=0, G=9, B=204]";
color5[1] = "Color [A=255, R=0, G=9, B=204]";
color5[8] = "Color [A=255, R=0, G=9, B=204]";
color5[23] = "Color [A=255, R=0, G=9, B=204]";
color5[33] = "Color [A=255, R=0, G=9, B=204]";
color5[43] = "Color [A=255, R=0, G=9, B=204]";
color5[54] = "Color [A=255, R=0, G=9, B=204]";
color5[58] = "Color [A=255, R=0, G=9, B=204]";
color6[24] = "Color [A=255, R=0, G=9, B=204]";
color6[11] = "Color [A=255, R=0, G=9, B=204]";
color6[15] = "Color [A=255, R=0, G=9, B=204]";
color6[40] = "Color [A=255, R=0, G=9, B=204]";
color6[44] = "Color [A=255, R=0, G=9, B=204]";
color6[51] = "Color [A=255, R=0, G=9, B=204]";
color6[55] = "Color [A=255, R=0, G=9, B=204]";
color6[58] = "Color [A=255, R=0, G=9, B=204]";
color7[0] =
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net; namespace getCheckCode
{
public partial class main : Form
{
HttpWebRequest RQ;
HttpWebResponse RP;
FileWebRequest FQ;
FileWebResponse FP;
private static Bitmap bmp;
string[] color=new string[60];
string[] color0 = new string[60];
string[] color1 = new string[60];
string[] color2 = new string[60];
string[] color3 = new string[60];
string[] color4 = new string[60];
string[] color5 = new string[60];
string[] color6 = new string[60];
string[] color7 = new string[60];
string[] color8 = new string[60];
string[] color9 = new string[60];
public main()
{
InitializeComponent();
getImage(txtUrl.Text.Trim().ToString());
pbimage.Image = bmp;
for (int i = 2; i <= 34; i = i + 10)
{
getColor(i, i + 5);
initialization();
lblresult.Text += getNum(0);
}
}
/// <summary>
/// 获取网络图片
/// </summary>
/// <param name="url"></param>
public void getImage(string url)
{
RQ = (HttpWebRequest)HttpWebRequest.Create(url);
RQ.CookieContainer = new CookieContainer();
RP = (HttpWebResponse)RQ.GetResponse();
bmp = new Bitmap(RP.GetResponseStream());
}
/// <summary>
/// 获取本地图片
/// </summary>
/// <param name="url"></param>
public void getFileImage(string url)
{
FQ = (FileWebRequest)FileWebRequest.Create(url);
FP=(FileWebResponse)FQ.GetResponse();
bmp=new Bitmap(FP.GetResponseStream());
}
private void btnflush_Click(object sender, EventArgs e)
{
lblresult.Text = " ";
getImage(txtUrl.Text.Trim().ToString());
pbimage.Image = bmp;
for (int i = 2; i <= 34; i=i+10)
{
getColor(i, i+5);
initialization();
lblresult.Text += getNum(0);
}
}
/// <summary>
/// 初始化数组
/// </summary>
/// <param name="begin"></param>
/// <param name="end"></param>
private void getColor(int begin,int end)
{
int j = 0;
for (int i = begin; i <= end; i++)
{
for (int k = 0; k <= 9; k++)
{
color[j] = bmp.GetPixel(i, k).ToString();
j++;
}
}
}
/// <summary>
/// 根据特征来判断数字
/// </summary>
/// <param name="begin"></param>
/// <returns></returns>
private string getNum(int begin)
{
int m=0;
string num="?";
//8
for (int i = 0; i < 60; i++)
{
if (color[i] == color8[i])
{
m++;
}
}
if (m >= 16)
{
num = "8";
m = 0;
}
else
{
m = 0;
}
//7
for (int i = 0; i < 60; i++)
{
if (color[i] == color7[i])
{
m++;
}
}
if (m >= 8)
{
num = "7";
m = 0;
}
else
{
m = 0;
}
//0
for (int i = 0; i < 60; i++)
{
if (color[i] == color0[i])
{
m++;
}
}
if (m >= 8)
{
num = "0";
m = 0;
}
else
{
m = 0;
}
//6
for (int i = 0; i < 60; i++)
{
if (color[i] == color6[i])
{
m++;
}
}
if (m >= 8)
{
num = "6";
m = 0;
}
else
{
m = 0;
}
//1
for (int i = 0; i < 60; i++)
{
if (color[i] == color1[i])
{
m++;
}
}
if (m >= 8)
{
num = "1";
m = 0;
}
else
{
m = 0;
}
//2
for (int i = 0; i < 60; i++)
{
if (color[i] == color2[i])
{
m++;
}
}
if (m >= 8)
{
num = "2";
m = 0;
}
else
{
m = 0;
}
//3
for (int i = 0; i < 60; i++)
{
if (color[i] == color3[i])
{
m++;
}
}
if (m >= 8)
{
num = "3";
m = 0;
}
else
{
m = 0;
}
//4
for (int i = 0; i < 60; i++)
{
if (color[i] == color4[i])
{
m++;
}
}
if (m >= 8)
{
num = "4";
m = 0;
}
else
{
m = 0;
}
//5
for (int i = 0; i < 60; i++)
{
if (color[i] == color5[i])
{
m++;
}
}
if (m >= 8)
{
num = "5";
m = 0;
}
else
{
m = 0;
}
//9
for (int i = 0; i < 60; i++)
{
if (color[i] == color9[i])
{
m++;
}
}
if (m >= 10)
{
num = "9";
m = 0;
}
else
{
m = 0;
}
return num;
}
/// <summary>
/// 初始化数字的像素
/// </summary>
private void initialization()
{
//0
color0[1] = "Color [A=255, R=0, G=9, B=204]";
color0[5] = "Color [A=255, R=0, G=9, B=204]";
color0[8] = "Color [A=255, R=0, G=9, B=204]";
color0[20] = "Color [A=255, R=0, G=9, B=204]";
color0[29] = "Color [A=255, R=0, G=9, B=204]";
color0[39] = "Color [A=255, R=0, G=9, B=204]";
color0[51] = "Color [A=255, R=0, G=9, B=204]";
color0[58] = "Color [A=255, R=0, G=9, B=204]";
//1
color1[1] = "Color [A=255, R=0, G=9, B=204]";
color1[9] = "Color [A=255, R=0, G=9, B=204]";
color1[11] = "Color [A=255, R=0, G=9, B=204]";
color1[20] = "Color [A=255, R=0, G=9, B=204]";
color1[21] = "Color [A=255, R=0, G=9, B=204]";
color1[28] = "Color [A=255, R=0, G=9, B=204]";
color1[29] = "Color [A=255, R=0, G=9, B=204]";
color1[49] = "Color [A=255, R=0, G=9, B=204]";
//2
color2[1] = "Color [A=255, R=0, G=9, B=204]";
color2[8] = "Color [A=255, R=0, G=9, B=204]";
color2[9] = "Color [A=255, R=0, G=9, B=204]";
color2[17] = "Color [A=255, R=0, G=9, B=204]";
color2[26] = "Color [A=255, R=0, G=9, B=204]";
color2[35] = "Color [A=255, R=0, G=9, B=204]";
color2[44] = "Color [A=255, R=0, G=9, B=204]";
color2[52] = "Color [A=255, R=0, G=9, B=204]";
//3
color3[2] = "Color [A=255, R=0, G=9, B=204]";
color3[7] = "Color [A=255, R=0, G=9, B=204]";
color3[10] = "Color [A=255, R=0, G=9, B=204]";
color3[24] = "Color [A=255, R=0, G=9, B=204]";
color3[34] = "Color [A=255, R=0, G=9, B=204]";
color3[43] = "Color [A=255, R=0, G=9, B=204]";
color3[52] = "Color [A=255, R=0, G=9, B=204]";
color3[58] = "Color [A=255, R=0, G=9, B=204]";
//4
color4[5] = "Color [A=255, R=0, G=9, B=204]";
color4[13] = "Color [A=255, R=0, G=9, B=204]";
color4[22] = "Color [A=255, R=0, G=9, B=204]";
color4[31] = "Color [A=255, R=0, G=9, B=204]";
color4[40] = "Color [A=255, R=0, G=9, B=204]";
color4[41] = "Color [A=255, R=0, G=9, B=204]";
color4[47] = "Color [A=255, R=0, G=9, B=204]";
color4[49] = "Color [A=255, R=0, G=9, B=204]";
//5
color5[0] = "Color [A=255, R=0, G=9, B=204]";
color5[1] = "Color [A=255, R=0, G=9, B=204]";
color5[8] = "Color [A=255, R=0, G=9, B=204]";
color5[23] = "Color [A=255, R=0, G=9, B=204]";
color5[33] = "Color [A=255, R=0, G=9, B=204]";
color5[43] = "Color [A=255, R=0, G=9, B=204]";
color5[54] = "Color [A=255, R=0, G=9, B=204]";
color5[58] = "Color [A=255, R=0, G=9, B=204]";
//6
color6[24] = "Color [A=255, R=0, G=9, B=204]";
color6[11] = "Color [A=255, R=0, G=9, B=204]";
color6[15] = "Color [A=255, R=0, G=9, B=204]";
color6[40] = "Color [A=255, R=0, G=9, B=204]";
color6[44] = "Color [A=255, R=0, G=9, B=204]";
color6[51] = "Color [A=255, R=0, G=9, B=204]";
color6[55] = "Color [A=255, R=0, G=9, B=204]";
color6[58] = "Color [A=255, R=0, G=9, B=204]";
//7
color7[0] =