= new Random((int)),/// /// 获取验证码方法 ///,int y = (0,int rand 有97%新玩家认为winform验证码识别(winform怎么设置界面验证码)值得一读!

{image}

4条解答

一.Cwinform中如何判断验证码

我写了个生成图片的方法 ,可以和您的CheckCode()方法配合使用。 。返回Bitmap对象。。 private Bitmap DrawVerifyCodePicture(string verifyCode) { int imageWidth = 15 * ( + 1);//定义图片宽度 。 。 int imageHeight = 30;//定义图片高度。。 Color[] colors = {, , , , , , , nrod};//验证码颜色集合 。。 string[] fonts = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体", "华文隶书", "Arial Black", "幼圆"};//验证码字体集合。 。 Random rand = new Random((int));//创建Random类的实例rand。。 Bitmap image = new Bitmap(imageWidth, imageHeight);//创建一个图像实例 。。 Graphics graphics = (image);//从该图创建一个绘画实例。 。 ();//先清空画面,接着用颜色填充。。 Pen pen = new Pen(, 0);//定义pen,用于绘制背景点 。 。 for (int i = 0; i < * 50; i++) { int x = (imageWidth);//定义背景点横侍老坐标。。 int y = (imageHeight);//定义背景点纵坐标 。。 ngle(pen, x, y, 1, 1);//在矩形框中绘制背景点。 。 } for (int i = 0; i < ; i++)//逐个定义字符的颜色 、字体、高度等 ,并绘制。。 { int colorIndex = ();//定义验证码颜色瞎谈液索引值 。。 int fontIndex = ();//定义验证码字体索引值。 。 Brush brush = new SolidBrush(colors[colorIndex]);//颜色。。 Font font = new Font(fonts[fontIndex], 16, );//字体 。 。 string singleCode = (i, 1);//提取单个字符。。 int x = 5 + (i * 15);//定义字符绘制的横坐标 。。 int y = 2;//定义字符绘制的纵坐标。 。 if (i % 2 == 0)//用于控制所有验证码不在同一高度上。。 { y = 1; } g(singleCode, font, brush, x, y);//开始绘制 。。 } ();//释放对象。 。 return (image); } 使用的时候 ,这样使用。。 verifyCode = CheckCode();//将verifyCode声明为全局的string对象,以便其它方法使用 。 。 Bitmap image = DrawVerifyCodePicture(verifyCode); = image; = ; = ; 验证的时磨物候,直接把用户输入的和生成的verifyCode进行对比。。 if (() == ())//不区分大小写 。。 { ("Right!"); } else { ("Wrong!"); } 效果如下:

二.CWinform程序获取获取验证码【高手进】

我用webHttpRequest和webHttpResponse获取网页的源码 ,然后从源码中捕获了验证码的地址,将验证码下载到本地或者直接读取Stream显示在一个PictureBox中,然后输入后POST回去 ,每次都会提示验证码错误。但是我在网页中打开验证码页面,然后把网页中的验证码填写到我的程序中再POST回去就正确 。 请问为什么回这样?验证码的地址只有一个应该没捕获错滴,另外Cookies和Post经过调试都没错。 十分感谢!!!!!请求的页面是你自己的页面还是别人的?
如果是别人的 ,就要看他是把数字验证码存放在什么地方的了。 。你的做法是假定了他把要对比的数字验证码存在了seesion里面,但是有可能他并没有存在session里面而是存在VIEWSTATE里面(针对)的呢?这个都不一定的,你可以尝试Response获取的页面把__VIEWSTATE值截取下来 然后以参数名为:__VIEWSTATE一起POST过去。。 。但是如果他的数字验证还有可能用其他方法存起来的也不一定哦。。 。如果是这样 ,那说明他在网站的安全性上做了考虑
——————————
还有哈,你的请求是分离请求 也就是说
第一次:你请求了含有验证码页面的那个页面 。。这次并没有请求验证码页面,也就是说此时没有验证码生成。
第二次 你单独请求了验证码页面 。这个时候验证码才生成
所以 你要测试的话应该这样测试才符合你程序的逻辑
1.打开含有验证码页面的那个页面。此时生成的验证码是忽略掉的
2.在上面页面中找到验证码页面 然后单独打开它 ,这时生成的验证码 ,才是你程序捕获到的验证码。你把这个验证码填在上面的页面中然后提交 。。看下能不能出错。 。。
以上步骤才是你程序模拟的步骤哦。 。。所以你的测试方法:
"但是我在网页中打开验证码页面,然后把网页中的验证码填写到我的程序中再POST回去就正确。 "
是不对的 。 。/// /// 获取验证码方法 ///
public bitmap loadimg(string imageurl)
{
try
{
httpwebrequest wrq = (httpwebrequest)(imageurl);//请求的url
= "get";
= 5000;
pe = "application/x-www-form-urlencoded";

//获取返回资源
httpwebresponse response = (httpwebresponse)se();

//获取流
bitmap bt = m(sestream()) as bitmap;
return bt;
}
catch
{
return null;
}
return null;
}调用这个应该就可以了 参数是图片地址是不是获取不了?或则无法识别了?
难道你想做某某不好的小程序?=.=!!!

三.Cwinform中如何判断验证码

图片?为什么不自己做验证码呢?你 证皇请径往致帮 这样的话,只能把每张 举严统 都标识一下。比如说图片1上是 abc 图片2上是cdf。输入验 来自 证码的时候判断下是哪张图片 ,并把相应的值记录下来与输入的值进行对比 。你只能这样做了

四.CwinForm怎么实现激活码验证

程序怎么知道这个激活码是不是有效的?一般是通过一段程序把用户的输入截取成一个一个字符,然后再转成ASCII码,然后再根据计算 ,你自定的方计算法,最后得到某一个数,然后与你最先设置的比较窗体中 ,需要自己增加的控件:
一个picturebox控件pbverifycode,
一个按钮butupdateverifycode(看不清楚,换一张图);
其它代码可复制使用。

public partial class frmlogin : form
{
//随机码的长度
private const int iverifycodelength = 6;
//随机码
private string strverifycode = "";
public frmlogin()
{
initializecomponent();
updateverifycode();
}
//更新验证码
private void updateverifycode()
{
strverifycode = createrandomcode(iverifycodelength);
createimage(strverifycode);
}
private string createrandomcode(int ilength)
{
int rand;
char code;
string randomcode = ;
//生成一定长度的验证码
random = new random();
for (int i = 0; i < ilength; i++)
{
rand = ();
if (rand % 3 == 0)
{
code = (char)('a' + (char)(rand % 26));
}
else
{
code = (char)('0' + (char)(rand % 10));
}
randomcode += ();
}
return randomcode;
}
/// 创建随机码图片
private void createimage(string strverifycode)
{
try
{
int irandangle = 45; //随机转动角度
int imapwidth = (int)( * 21);
bitmap map = new bitmap(imapwidth, 28); //创建图片背景

graphics graph = (map);
();//清除画面 ,填充背景
ngle(new pen(, 0), 0, 0, - 1, - 1);//画一个边框
mode = ;//模式

random rand = new random();
//背景噪点生成
pen blackpen = new pen(, 0);
for (int i = 0; i < 50; i++)
{
int x = (0, );
int y = (0, );
ngle(blackpen, x, y, 1, 1);
}

//验证码旋转,防止机器识别
char[] chars = ay();//拆散字符串成单字符数组
//文字距中
stringformat format = new stringformat();
= ;
ment = ;
//定义颜色
color[] c = { , , , , , , , };
//定义字体
string[] font = { "verdana", "microsoft sans serif", "comic sans ms", "arial", "宋体" };
for (int i = 0; i < ; i++)
{
int cindex = (7);
int findex = (5);
font f = new (font[findex], 13, );//字体样式(参数2为字体大小)
brush b = new h(c[cindex]);
point dot = new point(16, 16);

float angle = (-irandangle, irandangle);//转动的度数
transform(dot.x, dot.y);//移动光标到指定位置
nsform(angle);
g(chars[i].tostring(), f, b, 1, 1, format);

nsform(-angle);//转回去
transform(2, -dot.y);//移动光标到指定位置
}
= map;

}
catch (argumentexception)
{
("创建图片错误。");
}
}

private void butupdateverifycode_click(object sender, eventargs e)
{
updateverifycode();
}是你自己的验证码吗????可以放到数据库, ,并给验证码加个状态字段 ,,是否验证

本文版权归qu快排seo www.sEoguRuBlog.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系QQ√61910465