@H_
404_5@using Sy
stem; @H_
404_5@using Sy
stem.Data; @H_
404_5@using Sy
stem.Con
figuration; @H_
404_5@using Sy
stem.Web; @H_
404_5@using Sy
stem.Web.S
ecurity; @H_
404_5@using Sy
stem.Web.UI; @H_
404_5@using Sy
stem.Web.UI.WebControls; @H_
404_5@using Sy
stem.Web.UI.WebControl
s.WebParts; @H_
404_5@using Sy
stem.Web.UI.HtmlControls; @H_
404_5@using Sy
stem.Text; //
添加引用 @H_
404_5@using Sy
stem.Drawing; //
添加引用 @H_
404_5@/// <sum
Mary> @H_
404_5@///
checkCode_Ch 的@L_
450_30@说明 @H_
404_5@/// </sum
Mary> @H_
404_5@public class
checkCode_Ch @H_
404_5@
{ @H_
404_5@public
checkCode_Ch() @H_
404_5@
{ @H_
404_5@// @H_
404_5@// TODO: 在此处
添加构造
函数逻辑 @H_
404_5@// @H_
404_5@} @H_
404_5@private static ob
ject[] Create
String() @H_
404_5@
{ @H_
404_5@//定义
一个数组存储汉字编码的组成元素 @H_
404_5@
String[] str =
new String[1
6] { "0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f" }; @H_
404_5@Random ran = new Random(
); //定义
一个随机数对象 @H_
404_5@ob
ject[] bytes = new ob
ject[4]; @H_
404_5@for (int i = 0; i < 4; i++) @H_
404_5@
{ @H_
404_5@//
获取区位码第一位 @H_
404_5@int ran1 = ran.Next(11,14
); @H_
404_5@
String str1 = str[ran1].Trim(
); @H_
404_5@//
获取区位码第二位并防止数据重复 @H_
404_5@ran = new Random(ran1 * un
checked((
int)datetiR_556_11845@e.
Now.Ticks) + i
); @H_
404_5@int ran2; @H_
404_5@if (ran1 == 13) @H_
404_5@
{ @H_
404_5@ran2 = ran.Next(0,7
); @H_
404_5@} @H_
404_5@else @H_
404_5@
{ @H_
404_5@ran2 = ran.Next(0,16
); @H_
404_5@} @H_
404_5@
String str2 = str[ran2].Trim(
); @H_
404_5@//
获取区位码第三位 @H_
404_5@ran = new Random(ran2 * un
checked((
int)datetiR_556_11845@e.
Now.Ticks) + i
); @H_
404_5@int ran3 = ran.Next(10,16
); @H_
404_5@
String str3 = str[ran3].Trim(
); @H_
404_5@//
获取区位码第四位 @H_
404_5@ran = new Random(ran3 * un
checked((
int)datetiR_556_11845@e.
Now.Ticks) + i
); @H_
404_5@int ran4; @H_
404_5@if (ran3 == 10) @H_
404_5@
{ @H_
404_5@ran4 = ran.Next(1,16
); @H_
404_5@} @H_
404_5@else if (ran3 == 15) @H_
404_5@
{ @H_
404_5@ran4 = ran.Next(0,15
); @H_
404_5@} @H_
404_5@else @H_
404_5@
{ @H_
404_5@ran4 = ran.Next(0,16
); @H_
404_5@} @H_
404_5@
String str4 = str[ran4].Trim(
); @H_
404_5@//定义字节变量存储产生的
随机汉字区位码 @H_
404_5@byte byte1 = Convert.ToByte(str1 + str2,16
); @H_
404_5@byte byte2 = Convert.ToByte(str3 + str4,16
); @H_
404_5@byte[] s
Tradd = new byte[]
{ byte1,byte2 }; @H_
404_5@//将产生的汉字字节放入数组 @H_
404_5@byte
s.SETVALue(s
Tradd,i
); @H_
404_5@} @H_
404_5@return bytes; @H_
404_5@} @H_
404_5@private static
String Get
String() @H_
404_5@
{ @H_
404_5@Encoding gb = Encoding.GetEncoding("gb2312"
); @H_
404_5@ob
ject[] bytes = Create
String(
); @H_
404_5@//根据汉字字节解码出
中文汉字 @H_
404_5@
String str1 = gb.Get
String((byte[])Convert.ChangeType(bytes
[0],typeof(byte[]))
); @H_
404_5@
String str2 = gb.Get
String((byte[])Convert.ChangeType(bytes[1],typeof(byte[]))
); @H_
404_5@
String str3 = gb.Get
String((byte[])Convert.ChangeType(bytes[2],typeof(byte[]))
); @H_
404_5@
String str4 = gb.Get
String((byte[])Convert.ChangeType(bytes
[3],typeof(byte[]))
); @H_
404_5@
String str = str1 + str2 + str3 + str4; @H_
404_5@
httpCo
ntext.Current.Response.Cookie
s.Add(new
httpCookie("
checkCode",str)
); @H_
404_5@return str; @H_
404_5@} @H_
404_5@public static void GraphicsImage() @H_
404_5@
{ @H_
404_5@Sy
stem.Drawing
.bitmap image = new Sy
stem.Drawing
.bitmap((
int)R_556_11845@ath.Ceiling((Get
String().Length * 22.5)),22
); @H_
404_5@Graphics g = Graphic
s.FromImage(imag
E);
//创建画布 @H_
404_5@try @H_
404_5@
{ @H_
404_5@//
生成随机生成器 @H_
404_5@Random random = new Random(
); @H_
404_5@//清空
图片背景色 @H_
404_5@g.Clear(Color.Whit
E); @H_
404_5@//画
图片的背景噪音线 @H_
404_5@for (int i = 0; i < 1; i++) @H_
404_5@
{ @H_
404_5@int x1 = rando
m.Next(image.Width
); @H_
404_5@int x2 = rando
m.Next(image.Width
); @H_
404_5@int y1 = rando
m.Next(image.Height
); @H_
404_5@int y2 = rando
m.Next(image.Height
); @H_
404_5@g.DrawLine(new Pen(Color
.black),x1,y1,x2,y2
); @H_
404_5@} @H_
404_5@Font font = new Sy
stem.Drawing.Font("Couriew New",12,Sy
stem.Drawing.FontStyle
.bold
); @H_
404_5@Sy
stem.Drawing.Drawing2D.LinearGradientBrush brush = new Sy
stem.Drawing.Drawing2D.LinearGradientBrush @H_
404_5@(new Rectangle(0,image.Width,image.Height),Color
.blue,Color.DarkRed,1.2f,tru
E); @H_
404_5@g.Draw
String(Get
String(),font,brush,2,2
); @H_
404_5@//画
图片的前景噪音点 @H_
404_5@for (int i = 0; i < 50; i++) @H_
404_5@
{ @H_
404_5@int x = rando
m.Next(image.Width
); @H_
404_5@int y = rando
m.Next(image.Height
); @H_
404_5@image.SetPixel(x,y,Color.FromArgb(rando
m.Next())
); @H_
404_5@} @H_
404_5@//画
图片的边框线 @H_
404_5@g.DrawRectangle(new Pen(Color.Silver),image.Width - 1,image.Height - 1
); @H_
404_5@Sy
stem.IO.MemoryStream ms = new Sy
stem.IO.MemoryStream(
); @H_
404_5@image.Save(ms,Sy
stem.Drawing.Imaging.ImageFormat.Gif
); @H_
404_5@
httpCo
ntext.Current.Response.ClearContent(
); @H_
404_5@
httpCo
ntext.Current.Response.ContentType = "image/Gif"; @H_
404_5@
httpCo
ntext.Current.Response
.binaryWrite(m
s.ToArray()
); @H_
404_5@} @H_
404_5@catch (Exception ms) @H_
404_5@
{ @H_
404_5@
httpCo
ntext.Current.Response.Write(m
s.messag
E); @H_
404_5@} @H_
404_5@} @H_
404_5@} @H_
404_5@
@H_
404_5@using Sy
stem; @H_
404_5@using Sy
stem.Collections; @H_
404_5@using Sy
stem.Con
figuration; @H_
404_5@using Sy
stem.Data; @H_
404_5@using Sy
stem.Web; @H_
404_5@using Sy
stem.Web.S
ecurity; @H_
404_5@using Sy
stem.Web.UI; @H_
404_5@using Sy
stem.Web.UI.HtmlControls; @H_
404_5@using Sy
stem.Web.UI.WebControls; @H_
404_5@using Sy
stem.Web.UI.WebControl
s.WebParts; @H_
404_5@public partial class UserValidator_Chi
nese
checkCode : Sy
stem.Web.UI.Page @H_
404_5@
{ @H_
404_5@protected void Page_Load(ob
ject sender,EventArgs
E) @H_
404_5@
{ @H_
404_5@
checkCode_Ch.GraphicsImage(
); //
调用方法生成四位汉字验证码 @H_
404_5@} @H_
404_5@} @H_
404_5@
@H_
404_5@<asp:Text@L_
607_230@ ID="Validator" runat="server" Width="150px" ></asp:Text@L_
607_230@> @H_
404_5@<img id="Img1" alt="看不清,请点击我!" onclick="thi
s.src=thi
s.src+'?'" src="Chi
nese
checkCode.aspx" @H_
404_5@style="width: 75px; height: 24px" align="left" /> @H_
404_5@<asp:ImageButton ID="imgBtnLogin" runat="server" ImageUrl="~/Images/Login.GIF" @H_
404_5@OnClick="imgBtnLogin_Click" /> @H_
404_5@
@H_
404_5@protected void imgBtnLogin_Click(ob
ject sender,ImageClickEventArgs
E) @H_
404_5@
{ @H_
404_5@
httpCookie cookie =
request.Cookies["
checkCode"]; @H_
404_5@if (cookie.Value == thi
s.Validator.Text.Trim()) @H_
404_5@
{ @H_
404_5@//。。。 @H_
404_5@} @H_
404_5@else @H_
404_5@
{ @H_
404_5@Response.Write("<script>alert('验证码输入
错误,请重新输入!'
);LOCATIOn='Chi
neseCodeValidator.aspx'</script>"
); @H_
404_5@return; @H_
404_5@} @H_
404_5@} @H_
404_5@