PHP
发布时间:2019-11-21 发布网站:大佬教程 code.js-code.com
大佬教程收集整理的这篇文章主要介绍了asp.net中3种验证码示例(实现代码)(数字,数字字母混和,汉字),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
效果如图所示:
Default.aspx
<table>
<tr>
<td class="style1">
(验证码测试)</td>
<td>
<asp:Label
ID="Label1" runat="server"></asp:Label>
<asp:Image ID="Image1" runat="server" Height="22px" ImageUrl="~/ValidNum
s.aspx" Width="58px" />
<asp:Image ID="Image2" runat="server" Height="22px" ImageUrl="~/GetValid.aspx" Width="58px" /></td>
</tr> <tr>
<td class="style1">
</td>
<td>
<asp:Button ID="Button1" runat="server" Text="登录" OnClick="btnOK_Click" />
<asp:Button ID="Button2" runat="server" Text="取消" />
</td>
</tr>
</table>
using System;
using Syste
m.Collection
s.Generi
c; using Syste
m.Linq;
using Syste
m.Web;
using Syste
m.Web.UI;
using Syste
m.Web.UI.WebControls;
public partial class _Default : Syste
m.Web.UI.Page
{ protected void Page_Load(ob
ject sender,EventArgs
E) { if (!Page.IsPost
BACk)
{ String getNums = GetVali(
); Label1.Text = getNums;
}
}
/// <sum
Mary>
/// 随机生成4位数
/// </sum
Mary>
/// <returns>返回生成的随机数</returns>
public
String GetVali()
{ String strsvali = "0,1,2,3,4,5,6,7,8,9";
String[] ValiArray = strsvali.Split(','
); String ReturnNum = "";
int nums = -1;
Random vrand = new Random(
); for (
int n = 1; n <
5; n++)
{ if (nums
!= -1)
{ vrand = new Random(n * nums * un
checked((
int)datetiR_212_11845@e.Now.Ticks)
); }
int t = vrand.Next(10
); nums = t;
ReturnNum += ValiArra
Y[t];
}
Session["Valid"] = ReturnNum;
return ReturnNum;
}
protected void btnOK_Click(ob
ject sender,EventArgs
E) { if (Session["Valid"].To
String() == TextBox3.Text)
{ ClientScript.RegisterStartupScript(thi
s.GetType(),"ss","<script>alert('您
已经成功通过登录验证!')</script>"
); }
else
{ ClientScript.RegisterStartupScript(thi
s.GetType(),"<script>alert('您输入的验证码错误!')</script>"
); }
}
}
GetValid.aspx (可以直接将该页面作为源赋值给ImageUrl)
前台为空,后台代码如下:
using System;
using Syste
m.Collections;
using Syste
m.Configuration;
using Syste
m.Data;
using Syste
m.Linq;
using Syste
m.Web;
using Syste
m.Web.Security;
using Syste
m.Web.UI;
using Syste
m.Web.UI.HtmlControls;
using Syste
m.Web.UI.WebControls;
using Syste
m.Web.UI.WebControl
s.WebParts;
using Syste
m.Xm
l.Linq;
using Syste
m.Text;
using Syste
m.Drawing;
public partial class GetValid : Syste
m.Web.UI.Page
{ protected void Page_Load(ob
ject sender,EventArgs
E) { if (!IsPost
BACk)
{ String validateNum = GetValids(
); //成生4位随机字符串
CreateImage(validateNum
); //将生成的随机字符串绘成图片
Session["ValidNums"] = validateNum; //保存验证码
}
}
public static
String GetValids()
{ //获取GB2312编码页(表)
Encoding gb = Encoding.GetEncoding("gb2312"
); //调用函数产生4个随机中文汉字编码
ob
ject[] bytes = CreateRegionCode(4
); //根据汉字编码的字节数组解码出中文汉字
String s =
String.Empty;
foreach (ob
ject byt in bytes)
{ String str1 = gb.Get
String((byte[])Convert.ChangeType(byt,typeof(byte[]))
); s = s + str1;
}
//输出的控制台
return s;
}
public static ob
ject[] CreateRegionCode(int strlength)
{ //定义一个字符串数组储存汉字编码的组成元素
String[] rBase =
new String[1
6] { "0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f" };
Random rnd = new Random(
); //定义一个ob
ject数组用来
ob
ject[] bytes = new ob
ject[strlength];
/*每循环一次产生一个含两个元素的十六进制字节数组,并将其放入b
ject数组中
每个汉字有四个区位码组成
区位码第1位和区位码第2位作为字节数组第一个元素
区位码第3位和区位码第4位作为字节数组第二个元素
*/
for (int i = 0; i < strlength; i++)
{ //区位码第1位
int r1 = rnd.Next(11,14
); String str_r1 = rBase[r1].Trim(
); //区位码第2位
rnd = new Random(r1 * un
checked((
int)datetiR_212_11845@e.Now.Ticks) + i
); //更换随机数发生器的种子避免产生重复值
int r2;
if (r1 == 13)
{ r2 = rnd.Next(0,8
); }
else
{ r2 = rnd.Next(0,16
); }
String str_r2 = rBase[r2].Trim(
); //区位码第3位
rnd = new Random(r2 * un
checked((
int)datetiR_212_11845@e.Now.Ticks) + i
); int r3 = rnd.Next(10,16
); String str_r3 = rBase[r3].Trim(
); //区位码第4位
rnd = new Random(r3 * un
checked((
int)datetiR_212_11845@e.Now.Ticks) + i
); int r4;
if (r3 == 10)
{ r4 = rnd.Next(1,16
); }
else if (r3 == 15)
{ r4 = rnd.Next(0,15
); }
else
{ r4 = rnd.Next(0,16
); }
String str_r4 = rBase[r4].Trim(
); //定义两个字节变量存储产生的随机汉字区位码
byte byte1 = Convert.ToByte(str_r1 + str_r2,16
); byte byte2 = Convert.ToByte(str_r3 + str_r4,16
); //将两个字节变量存储在字节数组中
byte[] str_r = new byte[]
{ byte1,byte2 };
//将产生的一个汉字的字节数组放入ob
ject数组中
byte
s.SETVALue(str_r,i
); }
return bytes;
}
//生成图片
private void CreateImage(
String validateNum)
{ if (validateNum == null || validateNu
m.Trim() ==
String.Empty)
return;
//生成Bitmap图像
Syste
m.Drawing
.bitmap image = new Syste
m.Drawing
.bitmap(validateNu
m.Length * 12 + 10,22
); Graphics g = Graphic
s.FromImage(imag
E);
try
{ //生成随机生成器
Random random = new Random(
); //清空图片背景色
g.Clear(Color.Whit
E);
//画图片的背景噪音线
for (int i = 0; i < 2
5; i++)
{ int x1 = rando
m.Next(image.Width
); int x2 = rando
m.Next(image.Width
); int y1 = rando
m.Next(image.Height
); int y2 = rando
m.Next(image.Height
); g.DrawLine(new Pen(Color.Coral),x1,y1,x2,y2
); }
Font font = new Syste
m.Drawing.Font("Arial",8
); Syste
m.Drawing.Drawing2D.LinearGradientBrush brush = new Syste
m.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0,image.Width,image.Height),Color
.blue,Color.DarkRed,1.2f,tru
E);
g.Draw
String(validateNum,font,brush,2
); //画图片的前景噪音点
for (int i = 0; i < 100; i++)
{ int x = rando
m.Next(image.Width
); int y = rando
m.Next(image.Height
); image.SetPixel(x,y,Color.FromArgb(rando
m.Next())
); }
//画图片的边框线
g.DrawRectangle(new Pen(Color.Silver),image.Width - 1,image.Height - 1
); Syste
m.IO.MemoryStream ms = new Syste
m.IO.MemoryStream(
); //将图像保存到指定的流
image.Save(ms,Syste
m.Drawing.Imaging.ImageFormat.Gif
); Response.ClearContent(
); Response.ContentType = "image/Gif";
Response
.binaryWrite(m
s.ToArray()
); }
finally
{ g.Dispose(
); image.Dispose(
); }
}
}
ValidNums.aspx
(可以直接将该页面作为源赋值给ImageUrl)
前台为空,后台代码如下:
using System;
using Syste
m.Collections;
using Syste
m.Configuration;
using Syste
m.Data;
using Syste
m.Linq;
using Syste
m.Web;
using Syste
m.Web.Security;
using Syste
m.Web.UI;
using Syste
m.Web.UI.HtmlControls;
using Syste
m.Web.UI.WebControls;
using Syste
m.Web.UI.WebControl
s.WebParts;
using Syste
m.Xm
l.Linq;
using Syste
m.Drawing;
public partial class ValidNums : Syste
m.Web.UI.Page
{ protected void Page_Load(ob
ject sender,EventArgs
E) { if (!IsPost
BACk)
{ String validateNum = CreateRandomNum(4
); //成生4位随机字符串
CreateImage(validateNum
); //将生成的随机字符串绘成图片
Session["ValidNums"] = validateNum; //保存验证码
}
}
//生成随机字符串
private
String CreateRandomNum(
int numCount)
{ String allChar = "0,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z";
String[] allCharArray = allChar.Split(','
);//拆分成数组
String randomNum = "";
int temp = -1;//记录上次随机数的数值,尽量避免产生几个相同的随机数
Random rand = new Random(
); for (int i = 0; i < NumCount; i++)
{ if (temp
!= -1)
{ rand = new Random(i * temp * ((
int)datetiR_212_11845@e.Now.Ticks)
); }
int t = rand.Next(35
); if (temp == t)
{ return CreateRandomNum(NumCount
); }
temp = t;
randomNum += allCharArra
Y[t];
}
return randomNum;
}
//生成图片
private void CreateImage(
String validateNum)
{ if (validateNum == null || validateNu
m.Trim() ==
String.Empty)
return;
//生成Bitmap图像
Syste
m.Drawing
.bitmap image = new Syste
m.Drawing
.bitmap(validateNu
m.Length * 12 + 10,12,(Syste
m.Drawing.FontStyle
.bold | Syste
m.Drawing.FontStyle.Itali
C)); Syste
m.Drawing.Drawing2D.LinearGradientBrush brush = new Syste
m.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0,Syste
m.Drawing.Imaging.ImageFormat.Gif
); Response.ClearContent(
); Response.ContentType = "image/Gif";
Response
.binaryWrite(m
s.ToArray()
); }
finally
{ g.Dispose(
); image.Dispose(
); }
}
}
以上是3种验证码的全部代码。
另外也可以使用ashx请求验证码的方式,本示例仅使用Session存值处理。
大佬总结
以上是大佬教程为你收集整理的asp.net中3种验证码示例(实现代码)(数字,数字字母混和,汉字)全部内容,希望文章能够帮你解决asp.net中3种验证码示例(实现代码)(数字,数字字母混和,汉字)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。