读书人

高难度有关问题--识别quot;验证码quot;怎样获

发布时间: 2012-05-21 18:04:41 作者: rapoo

高难度问题--识别"验证码",怎样获取验证码图片,并且将图片转换成数字
我想做一个小程序,自动登陆移动网上营业厅.但是登陆时必须输入验证码,这也是这个程序比较难的部分了

首先,我感觉这张图片没有一个地址可以下载,程序不知该如何下手.怎样得到这张图片

然后,怎样分析这张图片,图片倒是比较简单,纯数字,而且字体很规范,并且没有额外噪点.

大家有兴趣并且愿意帮助我的,请到四川移动网上营业厅去看看:http://www.sc.chinamobile.com/service/

高分相赠

[解决办法]
帮顶一下吧
[解决办法]
验证码应该将随机字符画在图片中,最后将图片保存在流中,应该不容易吧
要是那么容易获取的话,很容易暴力破解了。
看看有高手回答没,顶下
[解决办法]
要用到图片的识别技术,现在的验证码的机制一直在变,一种就要调整很多次才能识别出来.
如果是随即散点的,就更难识别点了.
非常麻烦的,如果想登录,还是想注入方面的可能性.
[解决办法]
可以考虑验证码本身就是个一页面,在这个页面放一个有背景的图片,
然后随机生成一个字符串透明的覆盖在图片上,我试过,效果看起来也不错~~
[解决办法]
参考一下
http://bbs.zdnet.com.cn/thread-211944-1-1.html

这个验证码还是比较简单的
[解决办法]
http://blog.csdn.net/Qqwwee_Com/category/146600.aspx
[解决办法]
使用图像识别技术,或者数字识别(这个要简单点),可以通过神经网络来学习识别验证码,你可以在codeproject上面找找关于神经网络的文章,我记得有一篇专门讲的这个。。。

看这个网站的验证码很规则,而且没有干扰,应该有更简单的方法,你可以尝试一下:
1、为每个字母建立特征值库
2、获取图片流(必须在同一次请求中),将图片还原,分割出来单个的字母图片
3、从分割出来的图片中获得特征点的特征码
4、比较还原的图片和特征库中的特征码相同的则认为是对应的数字


上面的方法只适用于规则的验证码,不规则的验证码需要大量的特征信息,做起来很复杂。
[解决办法]
不懂帮顶
[解决办法]
http://www.sc.chinamobile.com/service/image.jsp

图片生成的地址~

[解决办法]
使用图像识别技术,或者数字识别(这个要简单点),可以通过神经网络来学习识别验证码,你可以在codeproject上面找找关于神经网络的文章,我记得有一篇专门讲的这个。。。

看这个网站的验证码很规则,而且没有干扰,应该有更简单的方法,你可以尝试一下:
1、为每个字母建立特征值库
2、获取图片流(必须在同一次请求中),将图片还原,分割出来单个的字母图片
3、从分割出来的图片中获得特征点的特征码
4、比较还原的图片和特征库中的特征码相同的则认为是对应的数字


上面的方法只适用于规则的验证码,不规则的验证码需要大量的特征信息,做起来很复杂。
————————————————————————

支持cuike519 的观点。
机器学习,神经网络的话,它是为了适应整个的rot 反破解那的确有难度。

没有杂点,且是纯数字的,字体大小固定,颜色单一,而且机器绘图我有画布的固定位置,这样做图相识别时难度代一点。
再者你对症下药,你就只分割图片-逐个匹配;
[解决办法]
呵呵,有个小构件可以帮你, AspriseOCR.dll,下面是一个示例程序,自己写程序把那个图片下载下来,(这不用我帮你吧),存成jpg图片,为了识别,得把图片反色一下(黑变白,白变黑,这应该也不用我帮你),很简单就可以识别了,识别率还蛮高的,想下载这个构件的话,google一下,满大街都是
[DllImport("AspriseOCR.dll", EntryPoint = "OCR")]
public static extern IntPtr OCR(string file, int type);

[DllImport("AspriseOCR.dll", EntryPoint = "OCRpart")]
static extern IntPtr OCRpart(string file, int type, int startX, int startY, int width, int height);

[DllImport("AspriseOCR.dll", EntryPoint = "OCRBarCodes")]
static extern IntPtr OCRBarCodes(string file, int type);

[DllImport("AspriseOCR.dll", EntryPoint = "OCRpartBarCodes")]
static extern IntPtr OCRpartBarCodes(string file, int type, int startX, int startY, int width, int height);

private string m_strResult="";
public Form1()
{
InitializeComponent();
}

private void btnGetText_Click(object sender, EventArgs e)
{
if (OFD.ShowDialog() == DialogResult.OK)
{
m_strResult = Marshal.PtrToStringAnsi(OCR(OFD.FileName, -1));
txtResult.Text = m_strResult;


}
}
}
[解决办法]
我看了下这个码还是很简单的,只要找出特征就可以了


可以参考我的一个例子
http://blog.csdn.net/jinjazz/archive/2008/06/17/2557010.aspx
[解决办法]
这个页面就一个session,获取session连同你的识别码和其他信息一起post回去估计就搞定了
[解决办法]
当然可以的撒

我才做了8个网站的获取验证码

找个简单的帖下代码了
[code=C#][/code]
private string GetCode()
{
HtmlDocument dom = Common.GetHtmlDocument(this.Browser);
if (dom == null)
return "";
//图片对象(根据图片名称找路径)
Bitmap img = GCSoft.ValidateCode.GetBitmap(dom, "imgVerify");
int Count = 0;
while (img == null)
{
if (Count > 5) {
throw new ApplicationException("验证码错误");
}
Thread.Sleep(500);
img = GCSoft.ValidateCode.GetBitmap(dom, "imgVerify");
Count++;
}
StringBuilder strbul = new StringBuilder();
try
{
//以红色为基础,在偏移量+-28000范围内,将图片解析成0,1的格式保存起来(针对简单的验证码可用这种方法)
string[] pics = GCSoft.ValidateCode.GetCodes(GCSoft.ValidateCode.ToBits(img, Color.Red, 28000), 1);

for (int i = 0; i < pics.Length; i++)
{
strbul.Append(this.CodeIS(pics[i].Replace("\n", "")));
}
}
catch
{
return "";
}
return strbul.ToString();
}
//找特征,将字符串转为对应的数字(比较苯的方法,这样就不用将特征码存在数据库)
private string CodeIS(string code)
{
if (code == null || code.Length < 1)
return "X";
String str = "";
try
{
int count = code.Length / 14;
if (count < 5)
{
str = "1";
}
else if (count == 6)
{
str = "7";
}
else if (count == 7)
{
if (code.Substring(0, 35) == "11111111111111111111111111111111111")
{
if (code.Substring(84, 14) == "11111111111111")
{
//2
if (code.Substring(56, 4) == "1111" && code.Substring(77, 6) == "000000")
str = "2";
else
str = "0";
}
else
{
//75943
if (code.Substring(43, 5) == "00000" && code.Substring(56, 4) == "1111")
str = "7";
else if (code.Substring(44, 5) == "00000" && code.Substring(52, 4) == "1111" && code.Substring(77, 4) == "1111")
str = "5";
else if (code.Substring(38, 2) == "00" && code.Substring(71, 5) == "00000" && code.Substring(77, 4) == "1111")
str = "9";
else if (code.Substring(56, 4) == "1111")
str = "3";


else if (code.Substring(77, 6) == "000000")
str = "4";
}
}
else
{
//6
str = "6";
}

}
else if (count == 8)
{
if (code.Substring(0, 40) == "1111111111111111111111111111111111111111")
{
//0,4,2,5,3,9
if (code.Substring(104, 8) == "11111111")
{
//2,0
if (code.Substring(88, 7) == "0000000")
str = "2";
else
str = "0";
}
else
{
//3,4,5,9
if (code.Substring(88, 8) == "00000000" && code.Substring(100, 2) == "00")
str = "4";
else if (code.Substring(51, 5) == "00000" && code.Substring(60, 4) == "1111" && code.Substring(80, 4) == "1111")
str = "5";
else if (code.Substring(81, 5) == "00000" && code.Substring(88, 4) == "1111")
str = "9";
else if (code.Substring(64, 4) == "1111")
str = "3";
else
str = "X";
}

}
else
{
//6,7,8
if (code.Substring(48, 7) == "0000000" && code.Substring(64, 4) == "1111")
str = "7";
else if (code.Substring(73, 2) == "00" && code.Substring(77, 2) == "00" && code.Substring(29, 2) == "00" && code.Substring(45, 3) == "111")
str = "6";
else if (code.Substring(58, 4) == "0000" && code.Substring(75, 2) == "11")
str = "8";

else
str = "X";
}
}
else if (count == 9)
{
str = "0";
}
else if (count == 14)
{
str = DoubleCode(code, 14, 7);
}
else if (count == 15)
{
str = DoubleCode(code, 15, 8);
}
else if (count == 16)
{
str = DoubleCode(code, 16, 8);
}
else if (count == 17)
{
str = DoubleCode(code, 17, 8);
}
}
catch
{
return "X";
}
return str;
}
//处理2个数字连在一起的情况,递归调用
private string DoubleCode(string strCode, int len, int rightCount)
{
StringBuilder strLeft = new StringBuilder();
StringBuilder strRight = new StringBuilder();
int leftCount = len - rightCount;


try
{
for (int i = 0; i < 14; i++)
{
strLeft.Append(strCode.Substring(len * i, len - rightCount));
strRight.Append(strCode.Substring(len * i + leftCount, rightCount));
}
}
catch
{
return "X";
}
return CodeIS(strLeft.ToString()) + CodeIS(strRight.ToString());
}

你的验证码不用去复杂的躁点,不用拉伸变形,不用取峰值的颜色应该很简单了
网上其实很多解决的思路,多找找了.
[解决办法]
05年的时候,做过一个湖南移动的破解程序,也是图片验证的。
后来怕犯法,就公开了算法和源码,不过不知道丢到哪个角落去了。
[解决办法]
兄弟,取图的时候要cookies或session的,这样一个用户对应一张图才能验证,不然服务器怎么知道
哪张图对哪个用户呢?呵呵,这个问题,你可以用网络数据嗅探工具,看看和网站通讯时,都下载了什么
回发了什么 ,你再用程序模拟这个过程。另外,我有图形验证码识别模块,或你可以用。QQ:345720998
[解决办法]
你可用ieHTTPHeaders软件,看看IE通讯数据包。
[解决办法]
现在有专门的投票公司,他们这方面的技术,基本上没有破解不到的验证码
[解决办法]
up
[解决办法]
public static Image GetRegCodePic(WebBrowser wbMail, string ImgName, string Src, string Alt)
{
HTMLDocument doc = (HTMLDocument)wbMail.Document.DomDocument;
HTMLBody body = (HTMLBody)doc.body;
IHTMLControlRange rang = (IHTMLControlRange)body.createControlRange();
IHTMLControlElement Img;
if (ImgName == "") //如果没有图片的名字,通过Src或Alt中的关键字来取
{
int ImgNum = GetPicIndex(wbMail, Src,Alt);
if (ImgNum == -1) return null;
Img = (IHTMLControlElement)wbMail.Document.Images[ImgNum].DomElement;
}
else
Img = (IHTMLControlElement)wbMail.Document.All[ImgName].DomElement;

rang.add(Img);
rang.execCommand("Copy", false, null);
Image RegImg = Clipboard.GetImage();
Clipboard.Clear();
return RegImg;
}

public static int GetPicIndex(WebBrowser wbMail, string Src, string Alt)
{
int imgnum = -1;
for (int i = 0; i < wbMail.Document.Images.Count; i++) //获取所有的Image元素
{
IHTMLImgElement img = (IHTMLImgElement)wbMail.Document.Images[i].DomElement;
if (Alt == "")
{
if (img.src.Contains(Src)) return i;
}
else
{
if (!string.IsNullOrEmpty(img.alt))
{
if (img.alt.Contains(Alt)) return i;
}
}
}
return imgnum;
}

[解决办法]
原文地址http://www.cnblogs.com/hobe/archive/2007/03/14/674292.html
[解决办法]
UP
[解决办法]



using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.Drawing.Drawing2D;



public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
CreatePic(RandomNum(8));//生成八位随机验证码
}
//生成随机码
public string RandomNum(int Len)
{
char[] Vchar = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
char[] Str = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };

Random r = new Random();


string[] num = new string[Len/2] ;//声明一个存储数字的数组
string[] num1 = new string[Len/2];//声明一个存储字母的数组

//把随机的字符分别存储在数组中
string VNum = "";
for (int i = 0; i < Len/2; i++)
{
num[i]= Vchar[r.Next(0, Vchar.Length)].ToString();
num1[i] = Str[r.Next(0, Str.Length)].ToString();
}

//把存储的数字数组用冒泡排序(升序)
string temp = "";
for (int a = 0; a < num.Length-1; a++)
{
for (int b = a + 1; b<num.Length; b++)
{
//把字符转化为ASCII进行比较
if (Convert.ToInt32(Convert.ToChar(num[b])) > Convert.ToInt32(Convert.ToChar(num[a])))
{
temp =num[a];
num[a] = num[b];
num[b] = temp;
}
}
}

//把存储的字母数组冒泡排序(降序)
string temp1 = "";
for (int a1 = 0; a1 < num1.Length - 1; a1++)
{
for (int b1 = a1 + 1; b1 < num1.Length; b1++)
{
//把字符转化为ASCII进行比较
if (Convert.ToInt32(Convert.ToChar(num1[b1])) > Convert.ToInt32(Convert.ToChar(num1[a1])))
{
temp1 = num1[a1];
num1[a1] = num1[b1];
num1[b1] = temp1;
}
}
}

//把排序后的数字数组存储在字符串中
for (int j = 0; j < num.Length; j++)
{
VNum += num[j];
}

//把排序后的字母数组存储在字符串中
for (int j1 = 0; j1 < num1.Length; j1++)
{
VNum += num1[j1];
}

//将生成的随机码保存到Session中
Session["CheckCode"] = VNum;
return VNum;
}
//绘制随机码
private void CreatePic(string checkCode)
{
if (checkCode == null || checkCode.Trim() == String.Empty)
return;
Bitmap image = new Bitmap(checkCode.Length * 10 + 10, 22);
Graphics g = Graphics.FromImage(image);
try
{
//生成随机生成器
Random random = new Random();
//清空图片背景色
g.Clear(Color.White);
//画图片的背景噪音线
for (int i = 0; i < 25; i++)
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height);
g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
}
//画图片字体和字号
Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));
//初始化画刷
LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.BlueViolet, Color.Crimson, 1.2f, true);
g.DrawString(checkCode, font, brush, 2, 2);
//画图片的前景噪音点
for (int i = 0; i < 100; i++)
{
int x = random.Next(image.Width);


int y = random.Next(image.Height);
image.SetPixel(x, y, Color.FromArgb(random.Next()));
}
//画图片的边框线
g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
// 输出图像
System.IO.MemoryStream ms = new System.IO.MemoryStream();
//将图像保存到指定流
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
Response.ClearContent();
//配置输出类型
Response.ContentType = "image/Gif";
//输入内容
Response.BinaryWrite(ms.ToArray());

}
finally
{
//清空不需要的资源
g.Dispose();
image.Dispose();

}
}

}


这有个例子 验证的时候判断Session 就行啦
[解决办法]
不懂,学习
[解决办法]
这个问题不是一般的难。我以前听我们老师说过车牌号码自动识别方法,听起来很深奥

[解决办法]

探讨
我看了下这个码还是很简单的,只要找出特征就可以了


可以参考我的一个例子
http://blog.csdn.net/jinjazz/archive/2008/06/17/2557010.aspx

[解决办法]
IHTMLControlRange imgRange; IHTMLDocument2 doc = new HTMLDocumentClass(); doc = (IHTMLDocument2)web1.Document.DomDocument; HTMLBody body = (HTMLBody)doc.body; Bitmap bmp = new Bitmap(60, 20); foreach (IHTMLImgElement x in doc.images) { if (x.src.Contains("service/image.jsp")) { imgRange = (IHTMLControlRange)body.createControlRange(); imgRange.add((IHTMLControlElement)x); imgRange.execCommand("Copy", false, null); bmp = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap); break; } }
[解决办法]
看看,不说话
[解决办法]
探讨
引用:
IHTMLControlRange imgRange;
IHTMLDocument2 doc = new HTMLDocumentClass();
doc = (IHTMLDocument2)web1.Document.DomDocument;
HTMLBody body = (HTMLBody)doc.body;
Bitmap bmp = new Bitmap(60, 20);
foreach (IHTMLImgElement x in doc.images)
{
if (x.src.Contains("service/…


报错啊:“IHTMLControlRange”: 不能实例…

[解决办法]
有刷新的动作在里面的,不是很懂!~
[解决办法]
新建一个页面,.aspx里什么都不用写。cs里加一下代码,肯定可以,我自己写的 记得给分呀!!!:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing.Design;
using System.Drawing;


public partial class image : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
this.CreateCheckCodeImage(RndNum());
}
private string RndNum()
{
int number;
char code;
string checkCode = String.Empty;

System.Random random = new Random();



for (int i = 0; i < 4; i++)
{
number = random.Next();
if (number % 2 == 0)
code = (char)('0' + (char)(number % 10));
else
code = (char)('A' + (char)(number % 26));
checkCode += code.ToString();
}
Response.Cookies.Add(new HttpCookie("yzmcode", checkCode));
return checkCode;
}
private void CreateCheckCodeImage(string checkCode)
{
if (checkCode == null || checkCode.Trim() == String.Empty)
return;
System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);
Graphics g = Graphics.FromImage(image);
try
{
//生成随机生成器
Random random = new Random();
//清空图片背景色
g.Clear(Color.White);
//画图片的背景噪音线
for (int i = 0; i < 25; i++)
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height);
g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
}

Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
g.DrawString(checkCode, font, brush, 2, 2);
//画图片的前景噪音点
for (int i = 0; i < 100; i++)
{
int x = random.Next(image.Width);
int y = random.Next(image.Height);
image.SetPixel(x, y, Color.FromArgb(random.Next()));
}
//画图片的边框线
g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
Response.ClearContent();
Response.ContentType = "image/Gif";
Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}
}

}

[解决办法]
LZ用我的看看,肯定可以的↑
[解决办法]
验证码要是那么好识别就不叫验证码了...

现在大部分网站的验证码都是极难识别那种了
[解决办法]
附加码识别 自动投票 这些本人都有现成程序,也可以定制,如果需要的话可以联系我购买dll。
QQ:14074536
字体位置随机,颜色随机,带干扰 等这些情况均可识别,
字体随机变形扭曲的无法识别。
[解决办法]
ls的吹呢吧.能把QQ邮箱的验证码破了就牛.
[解决办法]
已经有专门用于做验证码的BS,CS空间,你可直接用,不要想的太复杂.
[解决办法]
图片url http://www.sc.chinamobile.com/service/image.jsp
字体固定
颜色固定
间隔固定
……真是太好解决了,切分后找几个点看黑白就行了。
跟没有一样,这就是咱们国家半官方的网站的安全水平?

有点说不过去了:(
[解决办法]
跟vsa.com.cn一样的验证码,易识别
VS平台账号注册机--源码--详细文档--分析-原理-实现
http://www.javaeye.com/topic/306025

源码下载
http://code.google.com/p/vsacountreg/downloads/list
[解决办法]


好问题,收藏关注~~~~~~~~
[解决办法]


namespace GetTextFromImg
{

public partial class Form1 : Form
{
[DllImport("AspriseOCR.dll", EntryPoint = "OCR")]
public static extern IntPtr OCR(string file, int type);

[DllImport("AspriseOCR.dll", EntryPoint = "OCRpart")]
static extern IntPtr OCRpart(string file, int type, int startX, int startY, int width, int height);

[DllImport("AspriseOCR.dll", EntryPoint = "OCRBarCodes")]
static extern IntPtr OCRBarCodes(string file, int type);

[DllImport("AspriseOCR.dll", EntryPoint = "OCRpartBarCodes")]
static extern IntPtr OCRpartBarCodes(string file, int type, int startX, int startY, int width, int height);

private string m_strResult = "";
public Form1()
{
InitializeComponent();
picSrc.Load("http://www.sc.chinamobile.com/service/image.jsp");
dePic();
picSrc.Image.Save(@"F:\VCSharp\GetTextFromImg\GetTextFromImg\test.jpg");

}
public void dePic()
{
float[][] colorMatrixElements = {
new float[] {-1, 0, 0, 0, 0},
new float[] {0, -1, 0, 0, 0},
new float[] {0, 0, -1, 0, 0},
new float[] {0, 0, 0, 1, 0},
new float[] {1, 1, 1, 0, 1}
};

// 为 ImageAttributes 设置颜色变换矩阵

ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);
ImageAttributes imageAttributes = new ImageAttributes();
imageAttributes.SetColorMatrix(colorMatrix,
ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
Graphics g = Graphics.FromImage(picSrc.Image);
g.DrawImage(picSrc.Image,
new Rectangle(0, 0, picSrc.Image.Width, picSrc.Image.Height),
0, 0, picSrc.Image.Width, picSrc.Image.Height,
GraphicsUnit.Pixel, imageAttributes);
g.Dispose();
}

private void btnGetText_Click(object sender, EventArgs e)
{
string fn=@"F:\VCSharp\GetTextFromImg\GetTextFromImg\test.jpg";
m_strResult = Marshal.PtrToStringAnsi(OCR(fn, -1));
txtResult.Text = m_strResult;
//SavePhotoFromUrl("test.jpg", "http://www.sc.chinamobile.com/service/image.jsp");
//string fn=Directory.GetCurrentDirectory()+"\\test.jpg";

//m_strResult = Marshal.PtrToStringAnsi(OCR(fn, -1));
//txtResult.Text = m_strResult;
}
[解决办法]
如果只是针对一种验证码!而且像你网站这种黑色的,应该可以取得色值判断!不过要还原成数字没搞过!帮顶!

读书人网 >C#

热点推荐