最近做一个小型门户网站,登录需要用到验证码 网上找了一大推发现都不适合,
所以看书学习,自己做了一个验证码控件:
好了不YY了,直接上代码
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Bogin
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
Session["yanzhenma"] = CreateranDomNum(6);
getImages(Session["yanzhenma"].ToString());
}
}
#region 获得随机函数
/// <summary>
/// 获得随机函数
/// </summary>
/// <param name="Number">生成随机函数的位数</param>
/// <returns> 返回一个随机数</returns>
public static string CreateranDomNum(int Number)
{
string allChar = "0,1,2,3,4,5,6,7,8,9,q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,z,x,c,v,b,n,m";
string[] allarray = allChar.Split(',');
string randomNumber = "";
int temp = -1;
Random rand = new Random();
for (int i = 0; i < Number; i++)
{
if (temp != -1)
{
rand = new Random(i * temp * (int)DateTime.Now.Ticks);
}
int t = rand.Next(35);
if (temp == t)
{
return CreateranDomNum(Number);
}
temp = t;
randomNumber += allarray[t];
}
return randomNumber;
}
#endregion
private void getImages(string dateNumber)
{
if (dateNumber.Trim().Length == 0)
{
return;
}
Bitmap img = new Bitmap(dateNumber.Length*12 + 10, 22); //生成bitmap图像
Graphics g = Graphics.FromImage(img); //设置生成的图片格式
try
{
Random rand = new Random(); //生成随机生成器
g.Clear(Color.White); //清空图片背景色
//画图片的背景噪音线
for (int i = 0; i < 25; i++)
{
int x1 = rand.Next(img.Width);
int x2 = rand.Next(img.Width);
int y1 = rand.Next(img.Height);
int y2 = rand.Next(img.Height);
g.DrawLine(new Pen(Color.Coral), x1, y1, x2, y2);
}
//设置背景字体样式
Font font = new Font("Arial", 12, FontStyle.Bold | FontStyle.Italic);
LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, img.Width, img.Height),
Color.Red, Color.DarkRed, 1.2f, true);
g.DrawString(dateNumber, font, brush, 2, 2);
for (int i = 0; i < 100; i++)
{
int x = rand.Next(img.Width);
int y = rand.Next(img.Height);
img.SetPixel(x, y, Color.FromArgb(rand.Next())); //绘制前景噪音点
}
//画图片的边框线
g.DrawRectangle(new Pen(Color.Silver), 0, 0, img.Width - 1, img.Height - 1);
MemoryStream ms = new MemoryStream();
//将图像保存到指定的流
img.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
Response.ClearContent();
Response.ContentType = "img/gif";
Response.BinaryWrite(ms.ToArray());
}
catch (Exception)
{
throw;
}
finally
{
g.Dispose();
img.Dispose();
}
}
}
}
引用的话,直接新建一个页面,里面加一个img标签 把img标签的url引用到本页面的URL即可
效果图如下: