復(fù)制代碼 代碼如下:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text; //添加引用
using System.Drawing; //添加引用
/// summary>
/// CheckCode_Ch 的摘要說明
/// /summary>
public class CheckCode_Ch
{
public CheckCode_Ch()
{
//
// TODO: 在此處添加構(gòu)造函數(shù)邏輯
//
}
private static object[] CreateString()
{
//定義一個(gè)數(shù)組存儲漢字編碼的組成元素
string[] str = new string[16] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
Random ran = new Random(); //定義一個(gè)隨機(jī)數(shù)對象
object[] bytes = new object[4];
for (int i = 0; i 4; i++)
{
//獲取區(qū)位碼第一位
int ran1 = ran.Next(11, 14);
string str1 = str[ran1].Trim();
//獲取區(qū)位碼第二位并防止數(shù)據(jù)重復(fù)
ran = new Random(ran1 * unchecked((int)DateTime.Now.Ticks) + i);
int ran2;
if (ran1 == 13)
{
ran2 = ran.Next(0, 7);
}
else
{
ran2 = ran.Next(0, 16);
}
string str2 = str[ran2].Trim();
//獲取區(qū)位碼第三位
ran = new Random(ran2 * unchecked((int)DateTime.Now.Ticks) + i);
int ran3 = ran.Next(10, 16);
string str3 = str[ran3].Trim();
//獲取區(qū)位碼第四位
ran = new Random(ran3 * unchecked((int)DateTime.Now.Ticks) + i);
int ran4;
if (ran3 == 10)
{
ran4 = ran.Next(1, 16);
}
else if (ran3 == 15)
{
ran4 = ran.Next(0, 15);
}
else
{
ran4 = ran.Next(0, 16);
}
string str4 = str[ran4].Trim();
//定義字節(jié)變量存儲產(chǎn)生的隨機(jī)漢字區(qū)位碼
byte byte1 = Convert.ToByte(str1 + str2, 16);
byte byte2 = Convert.ToByte(str3 + str4, 16);
byte[] stradd = new byte[] { byte1, byte2 };
//將產(chǎn)生的漢字字節(jié)放入數(shù)組
bytes.SetValue(stradd, i);
}
return bytes;
}
private static string GetString()
{
Encoding gb = Encoding.GetEncoding("gb2312");
object[] bytes = CreateString();
//根據(jù)漢字字節(jié)解碼出中文漢字
string str1 = gb.GetString((byte[])Convert.ChangeType(bytes[0], typeof(byte[])));
string str2 = gb.GetString((byte[])Convert.ChangeType(bytes[1], typeof(byte[])));
string str3 = gb.GetString((byte[])Convert.ChangeType(bytes[2], typeof(byte[])));
string str4 = gb.GetString((byte[])Convert.ChangeType(bytes[3], typeof(byte[])));
string str = str1 + str2 + str3 + str4;
HttpContext.Current.Response.Cookies.Add(new HttpCookie("CheckCode", str));
return str;
}
public static void GraphicsImage()
{
System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((GetString().Length * 22.5)), 22);
Graphics g = Graphics.FromImage(image); //創(chuàng)建畫布
try
{
//生成隨機(jī)生成器
Random random = new Random();
//清空圖片背景色
g.Clear(Color.White);
//畫圖片的背景噪音線
for (int i = 0; i 1; 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.Black), x1, y1, x2, y2);
}
Font font = new System.Drawing.Font("Couriew New", 12, System.Drawing.FontStyle.Bold);
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(GetString(), font, brush, 2, 2);
//畫圖片的前景噪音點(diǎn)
for (int i = 0; i 50; 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);
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.ContentType = "image/Gif";
HttpContext.Current.Response.BinaryWrite(ms.ToArray());
}
catch (Exception ms)
{
HttpContext.Current.Response.Write(ms.Message);
}
}
}
第二步建立一個(gè)頁面引用類庫ChineseCheckCode.aspx前臺不用寫代碼,后臺引用類庫。。
復(fù)制代碼 代碼如下:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
public partial class UserValidator_ChineseCheckCode : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
CheckCode_Ch.GraphicsImage(); //調(diào)用方法生成四位漢字驗(yàn)證碼
}
}
第三步引用驗(yàn)證碼頁
復(fù)制代碼 代碼如下:
asp:TextBox ID="Validator" runat="server" Width="150px" >/asp:TextBox>
img id="Img1" alt="看不清,請點(diǎn)擊我!" onclick="this.src=this.src+'?'" src="ChineseCheckCode.aspx"
style="width: 75px; height: 24px" align="left" />
asp:ImageButton ID="imgBtnLogin" runat="server" ImageUrl="~/Images/Login.GIF"
OnClick="imgBtnLogin_Click" />
后臺判斷
復(fù)制代碼 代碼如下:
protected void imgBtnLogin_Click(object sender, ImageClickEventArgs e)
{
HttpCookie cookie = Request.Cookies["CheckCode"];
if (cookie.Value == this.Validator.Text.Trim())
{
//。。。
}
else
{
Response.Write("script>alert('驗(yàn)證碼輸入錯(cuò)誤,請重新輸入!');Location='ChineseCodeValidator.aspx'/script>");
return;
}
}
以上驗(yàn)證碼生成四位,請各位根據(jù) 情況做適當(dāng)修改。
現(xiàn)在總結(jié)了生成純數(shù)字、數(shù)字字母混合、純漢字的驗(yàn)證碼技術(shù)。希望對各位有所幫助。。
您可能感興趣的文章:- asp.net(C#) 生成隨機(jī)驗(yàn)證碼的代碼
- ASP.net 驗(yàn)證碼實(shí)現(xiàn)代碼(C#)
- Asp.net(C#)實(shí)現(xiàn)驗(yàn)證碼功能代碼
- asp.net 簡單驗(yàn)證碼驗(yàn)證實(shí)現(xiàn)代碼
- asp.net 驗(yàn)證碼生成和刷新及驗(yàn)證
- asp.net下生成英文字符數(shù)字驗(yàn)證碼的代碼
- ASP.NET中的無刷新驗(yàn)證碼的開發(fā)(完整代碼)
- 封裝的一個(gè)asp.net驗(yàn)證碼類
- asp.net ajax實(shí)現(xiàn)無刷新驗(yàn)證碼
- asp.net 驗(yàn)證碼的簡單制作(vb.net+C#)
- asp.net 圖片驗(yàn)證碼的HtmlHelper
- asp.net生成驗(yàn)證碼(純數(shù)字)
- asp.net中3種驗(yàn)證碼示例(實(shí)現(xiàn)代碼)(數(shù)字,數(shù)字字母混和,漢字)
- ASP.NET MVC驗(yàn)證碼功能實(shí)現(xiàn)代碼
- ASP.NET 實(shí)現(xiàn)驗(yàn)證碼以及刷新驗(yàn)證碼的小例子
- asp.net驗(yàn)證碼圖片生成示例
- ASP.NET驗(yàn)證碼(3種)
- 12306動態(tài)驗(yàn)證碼啟發(fā)之ASP.NET實(shí)現(xiàn)動態(tài)GIF驗(yàn)證碼(附源碼)
- asp.net驗(yàn)證碼的簡單制作
- ASP.NET驗(yàn)證碼實(shí)現(xiàn)(附源碼)