千家信息网

如何实现.net验证码的生成及使用

发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,这篇文章主要介绍"如何实现.net验证码的生成及使用",在日常操作中,相信很多人在如何实现.net验证码的生成及使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何实
千家信息网最后更新 2025年02月05日如何实现.net验证码的生成及使用

这篇文章主要介绍"如何实现.net验证码的生成及使用",在日常操作中,相信很多人在如何实现.net验证码的生成及使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何实现.net验证码的生成及使用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

小课堂:验证码的作用:

几年前,大部分网站、论坛之类的是没有验证码的,因为对于一般用户来说验证码只是增加了用户的操作,降低了用户的体验。但是后来各种灌水机器人、投票机器人、恶意注册机器人层出不穷,大大增加了网站的负担同时也给网站数据库带来了大量的垃圾数据。为了防止各种机器人程序的破坏,于是程序员想出了只有人眼能够识别的,程序不容易识别的验证码!

验证码是一个图片,将字母、数字甚至汉字作为图片的内容,这样一张图片中的内容用人眼很容易识别,而程序将无法识别。在进行数据库操作之前(比如登录验证、投票、发帖、回复、注册等等)程序首先验证客户端提交的验证码是否与图片中的内容相同,如果相同则进行数据库操作,不同则提示验证码错误,不进行数据库操作。这样各种机器人程序就被拒之门外了!

但是随着计算机科学的发展,模式识别等技术越来越成熟,于是编写机器人程序的家伙可以通过程序将直接写在图片中的内容识别出来,然后提交到服务器,这样验证码将形同虚设。为了防止机器人程序的识别,验证码的图片生成也不断在发展,加入干扰点、干扰线,文字变形、变换角度位置,颜色不同……各种防止计算机识别的技术也应用到验证码中。就在这两种技术的竞争中,于是便形成了我们现在看到的验证码,已经有很多人在抱怨"这是什么验证码哦,人眼都分辨不清楚是什么",一切也是无奈。

了解了验证码的作用,下面写一个简单的验证码生成及使用的实例

先建个页面用来展示验证码和判断验证码输入是否正确

    

此页面后台对验证码进行验证

 protected void Page_Load(object sender, EventArgs e) { //生成的验证码被保存到session中 if (Session["CheckCode"] != null) { string checkcode = Session["CheckCode"].ToString(); if (this.TextBox1.Text == checkcode) {  ClientScript.RegisterClientScriptBlock(this.GetType(), "", "alert('验证码输入正确!')", true); } else {  ClientScript.RegisterClientScriptBlock(this.GetType(), "", "alert('验证码输入错误!')", true); } } }

生成验证码页面png.aspx

 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { CreateCheckCodeImage(GenerateCheckCodes(4)); } } public void ShowAuthCode(Stream stream, out string code) { Random random = new Random(); code = random.Next(1000, 9999).ToString(); Bitmap bitmap = CreateAuthCode(code); bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Gif); } private string GenerateCheckCodes(int iCount) { int number; string checkCode = String.Empty; int iSeed = DateTime.Now.Millisecond; System.Random random = new Random(iSeed); for (int i = 0; i < iCount; i++) { number = random.Next(10); checkCode += number.ToString(); } Session["CheckCode"] = checkCode; return checkCode; } private Bitmap CreateAuthCode(string str) { Font fn = new Font("宋体", 12); Brush forecolor = Brushes.Black; Brush bgcolor = Brushes.White; PointF pf = new PointF(5, 5); Bitmap bitmap = new Bitmap(100, 25); Rectangle rec = new Rectangle(0, 0, 100, 25); Graphics gh = Graphics.FromImage(bitmap); gh.FillRectangle(bgcolor, rec); gh.DrawString(str, fn, forecolor, pf); return bitmap; } private void CreateCheckCodeImage(string checkCode) { if (checkCode == null || checkCode.Trim() == String.Empty) return; int iWordWidth = 15; int iImageWidth = checkCode.Length * iWordWidth; Bitmap image = new Bitmap(iImageWidth, 20); Graphics g = Graphics.FromImage(image); try { //生成随机生成器  Random random = new Random(); //清空图片背景色  g.Clear(Color.White); //画图片的背景噪音点 for (int i = 0; i < 20; 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); } //画图片的背景噪音线  for (int i = 0; i < 2; i++) {  int x1 = 0;  int x2 = image.Width;  int y1 = random.Next(image.Height);  int y2 = random.Next(image.Height);  if (i == 0)  {  g.DrawLine(new Pen(Color.Gray, 2), x1, y1, x2, y2);  } } for (int i = 0; i < checkCode.Length; i++) {  string Code = checkCode[i].ToString();  int xLeft = iWordWidth * (i);  random = new Random(xLeft);  int iSeed = DateTime.Now.Millisecond;  int iValue = random.Next(iSeed) % 4;  if (iValue == 0)  {  Font font = new Font("Arial", 13, (FontStyle.Bold | System.Drawing.FontStyle.Italic));  Rectangle rc = new Rectangle(xLeft, 0, iWordWidth, image.Height);  LinearGradientBrush brush = new LinearGradientBrush(rc, Color.Blue, Color.Red, 1.5f, true);  g.DrawString(Code, font, brush, xLeft, 2);  }  else if (iValue == 1)  {  Font font = new System.Drawing.Font("楷体", 13, (FontStyle.Bold));  Rectangle rc = new Rectangle(xLeft, 0, iWordWidth, image.Height);  LinearGradientBrush brush = new LinearGradientBrush(rc, Color.Blue, Color.DarkRed, 1.3f, true);  g.DrawString(Code, font, brush, xLeft, 2);  }  else if (iValue == 2)  {  Font font = new System.Drawing.Font("宋体", 13, (System.Drawing.FontStyle.Bold));  Rectangle rc = new Rectangle(xLeft, 0, iWordWidth, image.Height);  LinearGradientBrush brush = new LinearGradientBrush(rc, Color.Green, Color.Blue, 1.2f, true);  g.DrawString(Code, font, brush, xLeft, 2);  }  else if (iValue == 3)  {  Font font = new System.Drawing.Font("黑体", 13, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Bold));  Rectangle rc = new Rectangle(xLeft, 0, iWordWidth, image.Height);  LinearGradientBrush brush = new LinearGradientBrush(rc, Color.Blue, Color.Green, 1.8f, true);  g.DrawString(Code, font, brush, xLeft, 2);  } } //////画图片的前景噪音点  //for (int i = 0; i < 8; 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.BinaryWrite(ms.ToArray()); } finally { g.Dispose(); image.Dispose(); } }

到此,关于"如何实现.net验证码的生成及使用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

验证 图片 生成 程序 机器 机器人 数据 内容 数据库 学习 噪音 技术 用户 网站 背景 页面 输入 不同 相同 作用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 信息网络安全方面的证 乐游互联网科技有限公司 我的世界服务器怎么使用跨服背包 数据库登录表怎么创建 达梦数据库对医院实例 数据库表一对一 计算机网络技术以后职位 什么叫软件开发生命周期 如何转换成数据库文件格式 河南数据库安全箱 rsync 服务器配置 邯郸赛捷软件开发有限公司 王珊 数据库系统概论 网络安全省着罚自什么起实行 中通吉网络技术有限公司工作 电脑的数据库能储存多少 封天神魔登录不了服务器 网络安全设备销售许可证编号查询 中国头部app服务器 机架式服务器有物理开关吗 上海智能化网络技术服务价目表 加强综合治理筑牢网络安全屏障 互联网网络安全协议 仙境传说服务器端 网络安全的手抄报内容六年级 杭州以息互联网科技 高博远 数据库怎么建立性别 sql数据库开发用什么软件 南京网络技术大学 c4网络技术大赛是做什么的
0