建立ValidateImg.aspx文件,里面代码如下:
<%@ Page Language="c#" %>
<%@ Import Namespace="System.Web" %>
<%@ Import Namespace="System.Drawing" %>
<%@ Import Namespace="System.Drawing.Imaging" %>
<script runat="server" language="C#">
void Page_Load(Object sender, EventArgs e)
{
int charsNo = 4;
int fontSize = 12;
int bgWidth = 60;
int bgHeight = 20;
float x = (bgWidth - (charsNo * (fontSize + 0.5F))) / 2; // TODO: optimize
float y = (bgHeight - (fontSize * 1.7F)) / 2; // TODO: optimize
// Generate the text
//
//string genText = Globals.CreateTemporaryPassword(charsNo).ToUpper();
string genText = CreateTemporaryPassword(charsNo).ToUpper();
// Add the generate text to a session variable
//
Session.Add("ValidateNumber", genText);
// Create the memory map
//
Bitmap raster;
// Select an memory image from file of 290x80 px
// in the current dir, NoSpamBgImgs folder named bg_X.jpg
//
Graphics graphicObj;
string bgFilePath = Server.MapPath(@".\AntiSpamBgImgs\bg_" + new Random().Next(1) + ".jpg");
System.Drawing.Image imgObj = System.Drawing.Image.FromFile(bgFilePath);
// Creating the raster image & graphic objects
//
raster = new Bitmap(imgObj, bgWidth, bgHeight);
graphicObj = Graphics.FromImage(raster);
// Creating an array for most readable yet cryptic fonts for OCR's
// This is entirely up to developer's discretion
// CAPTCHA recomandation
//
String[] crypticFonts = new String[13];
crypticFonts[0] = "Arial";
crypticFonts[1] = "Verdana";
crypticFonts[2] = "Comic Sans MS";
crypticFonts[3] = "Impact";
crypticFonts[4] = "Haettenschweiler";
crypticFonts[5] = "Lucida Sans Unicode";
crypticFonts[6] = "Garamond";
crypticFonts[7] = "Courier New";
crypticFonts[8] = "Book Antiqua";
crypticFonts[9] = "Arial Narrow";
crypticFonts[10] = "Fixedsys";
crypticFonts[11] = "宋体";
crypticFonts[12] = "仿体";
// Instantiate object of brush with black color
//
Random r = new Random();
SolidBrush brushes = new SolidBrush(Color.FromArgb(r.Next(150), r.Next(150), r.Next(150)));
// Loop to write the characters on image with different fonts
// CAPTCHA method
//
for (int a = 0; a < genText.Length; a++)
{
Font fontObj = new Font(crypticFonts[r.Next(crypticFonts.Length)], fontSize);
graphicObj.DrawString(genText.Substring(a, 1), fontObj, brushes, x + (a * fontSize), y);
}
// Flush again
//
graphicObj.Flush();
// Setting the response header content MIME type
//
Response.ContentType = "image/gif";
// Saving the file to output stream to be displayed in browser
//
raster.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);
// Flushing to the Response
//
Response.Flush();
}
public static String CreateTemporaryPassword(int length)
{
string str = "";
Random r = new Random();
for (int i = 0; i < length; i++)
{
str += r.Next(0, 9).ToString();
}
return str;
}
</script>
<%@ Import Namespace="System.Web" %>
<%@ Import Namespace="System.Drawing" %>
<%@ Import Namespace="System.Drawing.Imaging" %>
<script runat="server" language="C#">
void Page_Load(Object sender, EventArgs e)
{
int charsNo = 4;
int fontSize = 12;
int bgWidth = 60;
int bgHeight = 20;
float x = (bgWidth - (charsNo * (fontSize + 0.5F))) / 2; // TODO: optimize
float y = (bgHeight - (fontSize * 1.7F)) / 2; // TODO: optimize
// Generate the text
//
//string genText = Globals.CreateTemporaryPassword(charsNo).ToUpper();
string genText = CreateTemporaryPassword(charsNo).ToUpper();
// Add the generate text to a session variable
//
Session.Add("ValidateNumber", genText);
// Create the memory map
//
Bitmap raster;
// Select an memory image from file of 290x80 px
// in the current dir, NoSpamBgImgs folder named bg_X.jpg
//
Graphics graphicObj;
string bgFilePath = Server.MapPath(@".\AntiSpamBgImgs\bg_" + new Random().Next(1) + ".jpg");
System.Drawing.Image imgObj = System.Drawing.Image.FromFile(bgFilePath);
// Creating the raster image & graphic objects
//
raster = new Bitmap(imgObj, bgWidth, bgHeight);
graphicObj = Graphics.FromImage(raster);
// Creating an array for most readable yet cryptic fonts for OCR's
// This is entirely up to developer's discretion
// CAPTCHA recomandation
//
String[] crypticFonts = new String[13];
crypticFonts[0] = "Arial";
crypticFonts[1] = "Verdana";
crypticFonts[2] = "Comic Sans MS";
crypticFonts[3] = "Impact";
crypticFonts[4] = "Haettenschweiler";
crypticFonts[5] = "Lucida Sans Unicode";
crypticFonts[6] = "Garamond";
crypticFonts[7] = "Courier New";
crypticFonts[8] = "Book Antiqua";
crypticFonts[9] = "Arial Narrow";
crypticFonts[10] = "Fixedsys";
crypticFonts[11] = "宋体";
crypticFonts[12] = "仿体";
// Instantiate object of brush with black color
//
Random r = new Random();
SolidBrush brushes = new SolidBrush(Color.FromArgb(r.Next(150), r.Next(150), r.Next(150)));
// Loop to write the characters on image with different fonts
// CAPTCHA method
//
for (int a = 0; a < genText.Length; a++)
{
Font fontObj = new Font(crypticFonts[r.Next(crypticFonts.Length)], fontSize);
graphicObj.DrawString(genText.Substring(a, 1), fontObj, brushes, x + (a * fontSize), y);
}
// Flush again
//
graphicObj.Flush();
// Setting the response header content MIME type
//
Response.ContentType = "image/gif";
// Saving the file to output stream to be displayed in browser
//
raster.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);
// Flushing to the Response
//
Response.Flush();
}
public static String CreateTemporaryPassword(int length)
{
string str = "";
Random r = new Random();
for (int i = 0; i < length; i++)
{
str += r.Next(0, 9).ToString();
}
return str;
}
</script>
使用方法:
<img src="/ValidateImg.aspx" align="absmiddle" id="code" width="66" height="30" alt="验证码" /><a href="javascript:document.getElementById('code').src='/ValidateImg.aspx?'+Math.random();void(0);">看不清楚,换一个验证码</a>
后台:Session["ValidateNumber"] == input