vs2008 C#实现 登录界面的验证码功能

vs2008 C#实现 登录界面的验证码功能,第1张

public partial class ValidateImage : System.Web.UI.Page

{

private readonly string ImagePath = "../Images/Validator.jpg"

private static string sValidator = ""

private void Page_Load(object sender, System.EventArgs e)

{

if (Request.Params["Validator"] != null)

{

sValidator = Request.Params["Validator"].ToString()

}

///创建Bmp位图

Bitmap bitMapImage = new System.Drawing.Bitmap(Server.MapPath(ImagePath))//从指定的Server.MapPath(ImagePath)路径中获取位图的实例

Graphics graphicImage = Graphics.FromImage(bitMapImage)//从制定的位图中实例中定义Graphics对象

///设置画笔的输出模式

graphicImage.SmoothingMode = SmoothingMode.AntiAlias//竖瞎仔制定消除锯齿的出现

///添加文本字符串

graphicImage.DrawString(sValidator, new Font("Arial", 20, FontStyle.Bold), SystemBrushes.WindowText, new Point(0, 0))

///余汪设置图像输出的格式

Response.ContentType = "image/jpeg"

///保存数据流

bitMapImage.Save(Response.OutputStream, ImageFormat.Jpeg)

///神枯释放占用的资源

graphicImage.Dispose()

bitMapImage.Dispose()

}

}

在 Visual Studio 中设置验证码页面并运行时不显示,纳亏可能是由于以下原因:

验证码页面的代码存在错误,导致页面无法正确渲染。请检查代码并尝试修复错误。

验证码页面的布局出现问题,导致验证码无法显示。请检查页面的布局,并确保验证码元素被正确地放置。

验证码图片被阻止显示。这可能是由于安全设置或浏览器插件的问题。尝试检查浏览器的安全设置或禁用插件,然后重新加载页面。

验证码生成的过程中出现了问题,导致验证码无法显示。请检查验证码生成的代码,并确保生成过程正确无误。

如果洞裂神以上的解决方法都无法解决问题,您可以尝试在浏览器中打开开发者工具,查看控制台中是否有任何错误信息。通过这些错误信息,您可以更好地了解问题所在,并尝试解源皮决它。

新建一个专门用来创建验证码图片的页面ValidateCode.aspx

它的后台cs文铅枝侍件代码如下:

PageLoad

privatevoid Page_Load(object sender, System.EventArgs e)

{

string checkCode = CreateRandomCode(4)

Session["CheckCode"] = checkCode

CreateImage(checkCode)

}

其中CreateRandomCode是自搭团定义的函数,参数代表验证码位数

privatestring CreateRandomCode(int codeCount)

{

string allChar = "0,1,2,3,4,5,6,7,8,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 randomCode = ""

int temp = -1

Random rand = new Random()

for(int i = 0i <codeCounti++)

{

if(temp != -1)

{

rand = new Random(i*temp*((int)DateTime.Now.Ticks))

}

int t = rand.Next(35)

if(temp == t)

{

return CreateRandomCode(codeCount)

}

temp = t

randomCode += allCharArray[t]

}

return randomCode

}

CreateImage也是一个自定义的函数,用于生成图

privatevoid CreateImage(string checkCode)

{

int iwidth = (int)(checkCode.Length * 11.5)

System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 20)

Graphics g = Graphics.FromImage(image)

Font f = new System.Drawing.Font("Arial", 10, System.Drawing.FontStyle.Bold)

Brush b = new System.Drawing.SolidBrush(Color.White)

//g.FillRectangle(new System.Drawing.SolidBrush(Color.Blue),0,0,image.Width, image.Height)

g.Clear(Color.Blue)

g.DrawString(checkCode, f, b, 3, 3)

Pen blackPen = new Pen(Color.Black, 0)

Random rand = new Random()

for (int i=0i<5i++)

{

int y = rand.Next(image.Height)

g.DrawLine(blackPen,0,y,image.Width,y)

}

System.IO.MemoryStream ms = new System.IO.MemoryStream()

image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg)

Response.ClearContent()

Response.ContentType = "image/Jpeg"

Response.BinaryWrite(ms.ToArray())

g.Dispose()

image.Dispose()

}

//g.FillRectangle(new System.Drawing.SolidBrush(Color.Blue),0,0,image.Width, image.Height)

g.Clear(Color.Blue)

这两种方法都可以改变生成图片的背景颜色

下面那个for循环用来生成一些随机的水平线

在需要用到验证码的页面添加一个<asp:Image>控件即可,但是要把ImageUrl指向生成验证码的页面

<asp:Image Runat="server" ID="ImageCheck" ImageUrl="ValidateCode.aspx"></asp:Image>


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11990600.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存