一些常見的驗證碼:
功能分析:
一般校正碼具有的功能:
1、顯示內容
顯示內容一般是數字或者數字+字元,還有更變態的,顯示的內容是隨機漢字。
如何隨機產生漢字,請看:
《用C#產生隨機中文漢字驗證碼的基本原理》
http://wulei8899.cnblogs.com/archive/2005/06/29/183200.html
2、內容顯示
內容顯示這裡,有很多做法,常見的有以下幾種:
2.1 以一個不常被看到的字型顯示內容,
2.2 字型隨機傾斜顯示
2.3 每個字隨機顯示不同顏色
2.4 內容隨機顯示在不同位置。
2.5 文字採用就漸層顏色,同一個字就有好幾種顏色組成。
3、背景顯示
常見背景顯示方案:
3.1、使用幹擾線來,後面隨機顯示數條幹擾線,這些線的顏色跟字型的顏色類似
3.2、幹擾點,後面隨機顯示數個幹擾點,這些點的顏色跟字型的顏色類似
3.3、幹擾色塊,後面隨機出現一個色塊進行幹擾
常見幾種開源的校正碼產生代碼
:
相關文章:ASP.net 驗證碼(C#)
http://blog.csdn.net/SW515/archive/2005/02/03/279364.aspx
我個人在這些開源校正碼中,最喜歡這個,校正碼不會複雜到使用者識別不了,而程式判斷又有相當的難度
相關文章:ASP 產生 彩色 可變長 驗證碼程式
http://www.codefans.com/ArticleView/Article_6728.html
Asp.Net 動態產生驗證碼
http://sleeping.cnblogs.com/archive/2005/12/19/299980.html
象 DEV-Club 那樣的彩色校正碼
http://www.blueidea.com/tech/program/2003/709.asp
C#的彩色驗證碼
http://www.codefans.com/ArticleView/Article_6745.html
VerifyCode(asp),gif驗證碼產生技術
http://www.codefans.com/ArticleView/Article_6735.html
region 實現一個驗證碼的類
http://www.innerv.com/blogview.asp?logID=509&cateID=5
如何在asp.net中動態產生驗證碼
http://www.dwww.cn/new/2005911154522249.html
256色BMP圖片驗證碼識別指令碼
http://www.51cto.com/html/2005/1101/10438.htm
QQ驗證碼識別原始碼(C#/NET1.1)
http://www.intodigi.com/Net/Website/Program/NET/12082.html
一個例子:
/* Copyright all(c) 2005 ZhongFeng, http://blog.csdn.net/SW515 */
public class ValidateCode : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
this.CreateCheckCodeImage(GenerateCheckCode());
}
#region Web Form設計器產生的程式碼
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 該調用是 ASP.NET Web Form設計器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 設計器支援所需的方法 - 不要使用代碼編輯器修改
/// 此方法的內容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private string GenerateCheckCode()
{
int number;
char code;
string checkCode = String.Empty;
System.Random random = new Random();
for(int i=0; i<5; 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("CheckCode", 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();
}
}
}
假如以上驗證碼產生器頁面名為:CheckCode.aspx,那麼在登入頁面中使用“<IMG>” 這個 HTML 元素來顯示產生的驗證碼圖片:<IMG src="CheckCode.aspx">
在登入頁面的登入按鈕的處理事件中使用以下代碼判斷驗證碼:
private void btnLogin_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
if(Request.Cookies["CheckCode"] == null)
{
lblMessage.Text = "您的瀏覽器設定已被禁用 Cookies,您必須設定瀏覽器允許使用 Cookies 選項後才能使用本系統。";
lblMessage.Visible = true;
return;
}
if(String.Compare(Request.Cookies["CheckCode"].Value, txtCheckCode.Text, true) != 0)
{
lblMessage.Text = "驗證碼錯誤,請輸入正確的驗證碼。";
lblMessage.Visible = true;
return;
}
// other code
}