一、验证码(CAPTCHA)
是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。
可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简易的方式实现了这个功能。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。
二、C#代码实现数字验证码
<span style="font-size:18px;"> private void picString_Click(object sender, EventArgs e)
{
Random r = new Random();//返回非负随机数。
string strNumber = "";//定义一个字符串存随机数
for (int i = 0; i < 5; i++)
{
int num = r.Next(10);//返回一个小于10的非负随机数。
//把随机数都存到这个字符串中
strNumber += num;
}
//创建一个位图用来存验证码
Bitmap bm = new Bitmap(110, 30);
//创建这个对象
Graphics g = Graphics.FromImage(bm);
//画验证码
// 需要五种字体
string[] fontName = new string[] {"幼圆","全新硬笔行书简","华文彩云","宋体",
"方正舒体" };
//需要五种颜色
Color[] color = new Color[] { Color.Red,Color.Blue,Color.Green,
Color.Pink,Color.Black};
for (int i = 0; i < 5; i++)
{
Point point=new Point(i*20,0);//画的起点不同定义的一个坐标
g.DrawString(strNumber[i].ToString(), new Font(fontName[i], 20),
new SolidBrush(color[i]),point);
}
//画线
for (int i = 0; i < 25; i++)
{
//r.Next(bm.Width),r.Next(bm.Height) 位图内点的坐标
Point p_1 = new Point(r.Next(bm.Width), r.Next(bm.Height));//返回位图一点
Point p_2 = new Point(r.Next(bm.Width), r.Next(bm.Height));//返回位图另一点
g.DrawLine(new Pen(Brushes.Gray),p_1,p_2);//画直线
}
//画点
for (int i = 0; i < 50; i++)
{
Point p_1 = new Point(r.Next(bm.Width), r.Next(bm.Height));
bm.SetPixel (p_1.X, p_1.Y, Color.Yellow);//获取位图 指定颜色
}
picString.Image = bm;
//MessageBox.Show(strNumber);
}</span>
三、小结:这种方法是利用位图来存储验证数字,并加了随机的点和线,单击piturebox控件会触发事件,最后也是用piturebox中的Image接收的位图。