现在的位置: 首页 > 综合 > 正文

(完整程序)C#.Net2.0的简单验证码识别示例

2013年08月14日 ⁄ 综合 ⁄ 共 10181字 ⁄ 字号 评论关闭

 本文所讲的技术只是验证码识别的初级技术,只能识别一些简单的验证码,比如

符合下列部分条件的:字体工整、位置固定、颜色统一、没有干扰点、背静单纯。

程序是通过抓特征点来达到识别目的。图片由一个一个的点(像素)组成,点的颜

色变化就组成了我们看见的图片,呈现一个图象就是那几个点按照一定的顺序排

列而已。

这样识别率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];

        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= 

抱歉!评论已关闭.