`

实现复杂的验证码

阅读更多

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
    
    <script language="javascript">
      //验证码:读取cookie中的值
        function readCookie()
        {
            
            //判断是否存在cookie
            var isExist = document.cookie.indexOf("imgRandom=");
            //alert(isExist);
            if(isExist!=-1)
            {
                //“imgRandom=”后面的等号的位置
                var c=  document.cookie.indexOf("=",isExist)+1;
                //获取等号后面的字符串,也就是所需要的验证码!
                var str = document.cookie.substring(c)
                //alert(document.cookie.substring(c));
                
                if(document.getElementById("Image").value!=str)
                {
                     
                     document.getElementById("Image").select();
               
                     alert("验证码输入错误!")
                     return false;
                }else
                {
                 return true;
                }
            }
        }
      
        //onload = readCookie;
        //获取图片的src
        function imgSrc()
        {
           
        
            // 通过链接让图片中的src发生变化
           document.getElementById("imgRandom").src = document.getElementById("imgRandom").src + "?abc=" + Math.random();

         
        }
        
    
 
    </script>
</head>
<body>

<form name="vcode" action="Default.aspx" method="post" onsubmit=" readCookie()">
   验证码 :  <input  id="Image" type="text" name="checkImage" style="width: 72px; height:20px" /><span style="vertical-align:bottom"><img id="imgRandom" src="Randomimage.aspx" alt="" /></span><a href="javascript:imgSrc()">看不清换一张</a><br />
   
   <input type="submit" value="确定" style="border:solid 1px black" />
   </form>
</body>
</html>






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;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
}




<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Randomimage.aspx.cs" Inherits="Randomimage" %>






using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Drawing;
using System.IO;


public partial class Randomimage :System.Web.UI.Page
{
    public void Page_Load(object sender, EventArgs e)
    {
        string random = this.random();
        /*
         * 将随机数字添加到cookie中
         */
       
        //添加cookie
        //imgCookie.Value = random;
        //this.Response.Cookies.Add(imgCookie);
        //this.Response.Write(imgCookie.Value);


        /*
         * 图片加载的时候,在图片上写随机数
         */
        int width = Convert.ToInt32(random.Length * 25); 
        using (Bitmap image = new Bitmap(width, 40))
        {
            //应用画板,在画板上书写数字
            using (Graphics gp = Graphics.FromImage(image))
            {
                //用字符串的形式书写数字
                //gp.DrawString(random, new Font("宋体", 24), Brushes.Red, new PointF(20.0F, 10.0F));
                gp.Clear(Color.White);
                Font font = new Font("隶书", 24, FontStyle.Bold);
                System.Drawing.Drawing2D.LinearGradientBrush brush =
                new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.DarkOrchid, Color.Blue, 3.5f, true);
                gp.DrawString(random, font, brush, 3, 2);
                this.drawLine(gp, image);

            }
            //显示图片
            //image.Save(this.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
            MemoryStream ms = new MemoryStream();
            image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
           
            //输出图片
            Response.ClearContent();
            Response.ContentType = "text/html";
            Response.BinaryWrite(ms.ToArray());
        }
        HttpCookie imgCookie = null;
        if (this.Request.Cookies["imgRandom"] == null)
        {
            imgCookie = new HttpCookie("imgRandom");
            imgCookie.Value = random;
            this.Response.Cookies.Add(imgCookie);
            //this.Response.Redirect("image.aspx");
        }
        else
        {
            imgCookie = new HttpCookie("imgRandom");
            imgCookie.Value = random;
            this.Response.Cookies.Add(imgCookie);
        }
    }
    /*
     * 随机数字的获取
     */
    public string random()
    {
        //string number = "";
        //Random random = new Random();

        //for (int i = 0; i < 4; i++)
        //{
        //    number += (random.Next(0, 10)).ToString();
        //}
        string guid = Guid.NewGuid().ToString();
        string rtuStr = Guid.NewGuid().ToString().Substring(1, 4);
         
         
        return rtuStr;
    }
    private void drawPoint(Bitmap img)
    {
        Random ran = new Random();
        int col = ran.Next();//在一次的图片中杂店颜色相同
        for (int i = 0; i < 100; i++)
        {
            int x = ran.Next(img.Width);
            int y = ran.Next(img.Height);
            img.SetPixel(x, y, Color.FromArgb(col));
        }
    }
    private void drawLine(Graphics gfc, Bitmap img)
    {
        Random ran = new Random();
        //选择画10条线,也可以增加,也可以不要线,只要随机杂点即可
        for (int i = 0; i < 10; i++)
        {
            int x1 = ran.Next(img.Width);
            int y1 = ran.Next(img.Height);
            int x2 = ran.Next(img.Width);
            int y2 = ran.Next(img.Height);
            gfc.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2); //注意画笔一定要浅颜色,否则验证码看不清楚
        }
    }
}






0
0
分享到:
评论

相关推荐

    .net 复杂的验证码

    本教程将详细介绍如何在.NET中实现一个具有背景随机、字体随机和中英文数字随机的复杂验证码,并且支持用户无刷新更换验证码。 首先,我们需要了解验证码的基本构成。验证码通常由一串随机生成的字符组成,这些字符...

    基于形状上下文的复杂验证码识别算法

    使用改进的形状上下文方法对复杂验证码进行识别,采用整体识别方法,不对图片进行...设计并实现复杂验证码识别算法,并与简单验证码进行比较。实验结果证明,复杂验证 码识别算法能对字符粘连的复杂验证码进行识别。

    vue+springboot+redis+kaptcha实现登录验证码

    Kaptcha是Java的一个开源验证码生成库,它能够生成各种类型的复杂验证码,防止机器人或恶意软件自动填写表单。在Spring Boot项目中,我们可以通过配置Kaptcha Bean来定制验证码的样式,包括字体、颜色、背景等。当...

    使用Vue 实现滑动验证码功能

    在实际应用中,开发者可以根据具体需求进一步增强滑动验证码的安全性和交互性,比如调整滑块的样式、增加动态元素以及对拖拽轨迹进行更复杂的分析等。通过前后端的共同努力,才能构建一个既安全又用户友好的验证码...

    使用python实现滑动验证码功能

    验证码系统需要能够有效区分人类用户和自动化脚本,因此,验证码的生成和验证过程需要设计得足够复杂和不可预测。此外,前端代码应当进行加密和混淆,以防止被恶意用户分析和绕过。 以上内容基于文件中提供的信息,...

    Android验证码的实现

    本篇文章将深入探讨如何在Android平台上实现验证码功能,包括自定义控件的创建和验证码的生成与验证。 首先,验证码的主要目的是防止恶意机器人或自动化脚本进行非法操作,如批量注册、刷票等。在Android应用中,...

    C#实现的验证码

    在本案例中,我们讨论的是使用C#编程语言实现的验证码功能,它涉及到图像处理和随机数生成等技术。 在C#中,生成验证码主要涉及以下几个步骤: 1. **随机数生成**:首先,我们需要一个随机数生成器来创建验证码中...

    js实现图片验证码.zip

    3. **颜色与背景**:为了进一步增加复杂性,可以添加随机颜色和不规则背景,这可以通过Canvas API中的fillStyle和strokeStyle属性来实现。 4. **扭曲路径**:除了扭曲文本,还可以扭曲文本的路径,例如通过贝塞尔...

    java用servlet实现登陆验证码

    Java使用Servlet实现登录验证码涉及到的是Web开发中的安全性与用户...通过这个小例子,开发者可以深入理解验证码的工作原理,并能自定义实现更复杂的验证码逻辑,如滑动验证码、拼图验证码等,以适应更高的安全需求。

    beego框架图形验证码实现

    【beego框架图形验证码实现】是使用Go语言开发的一个高效且功能丰富的图形验证码库,它为Web应用提供了安全的验证码生成服务。这个库的核心目的是为了防止自动化程序(如机器人)进行非法操作,如批量注册、恶意登录...

    实现带验证码的注册登录

    在这个项目中,我们将重点讨论图像验证码的实现,因为它是最常见的形式。图像验证码通常包含一串随机字符,用户需要正确输入这些字符才能继续注册或登录过程。 首先,我们需要理解验证码的生成过程。这涉及到以下几...

    spring-gateway实现登录验证码校验的代码,百分百可用

    Kaptcha 是一个 Java 实现的验证码生成器,它可以生成包含字母和数字的复杂图片,并具有可配置的样式和扭曲程度,从而增加破解的难度。 首先,我们需要在项目中引入 Kaptcha 的依赖。在 Maven 或 Gradle 的配置文件...

    Qt实现随机验证码功能

    本文将详细讲解如何使用Qt框架来实现一个随机验证码的功能。 Qt是一个跨平台的C++图形用户界面应用程序开发框架,它提供了丰富的库和工具,使得开发人员可以方便地创建桌面、移动和嵌入式应用。在Qt中实现随机...

    ASPNET的验证码第三方控件dll

    标题提到的"ASPNET的验证码第三方控件dll"是指一种使用C#编写的、专为ASP.NET平台设计的验证码组件,以动态链接库(DLL)的形式提供,通常包含了实现复杂验证码生成和验证功能的类库。这种控件可以帮助开发者快速...

    java实现动态验证码的效果

    Java 实现动态验证码效果是一种常见的安全机制,用于防止自动化脚本或机器人在网站上进行恶意操作,如批量注册、登录等。在这个过程中,我们将探讨如何使用Java语言来创建一个简单的动态验证码系统,主要包括以下几...

Global site tag (gtag.js) - Google Analytics