C#系统登录随机验证码生成及其调用方法

话不多说,直接上代码

 public ValidateCode()
        {
        }
        /// <summary>
        /// 验证码的最大长度
        /// </summary>
        public int MaxLength
        {
            get { return 10; }
        }
        /// <summary>
        /// 验证码的最小长度
        /// </summary>
        public int MinLength
        {
            get { return 1; }
        }
        /// <summary>
        /// 生成验证码
        /// </summary>
        /// <param name="length">指定验证码的长度</param>
        /// <returns></returns>
        public string CreateValidateCode(int length)
        {
            int[] randMembers = new int[length];
            int[] validateNums = new int[length];
            string validateNumberStr = "";
            //生成起始序列值
            int seekSeek = unchecked((int)DateTime.Now.Ticks);
            Random seekRand = new Random(seekSeek);
            int beginSeek = (int)seekRand.Next(0, Int32.MaxValue - length * 10000);
            int[] seeks = new int[length];
            for (int i = 0; i < length; i++)
            {
                beginSeek += 10000;
                seeks[i] = beginSeek;
            }
            //生成随机数字
            for (int i = 0; i < length; i++)
            {
                Random rand = new Random(seeks[i]);
                int pownum = 1 * (int)Math.Pow(10, length);
                randMembers[i] = rand.Next(pownum, Int32.MaxValue);
            }
            //抽取随机数字
            for (int i = 0; i < length; i++)
            {
                string numStr = randMembers[i].ToString();
                int numLength = numStr.Length;
                Random rand = new Random();
                int numPosition = rand.Next(0, numLength - 1);
                validateNums[i] = Int32.Parse(numStr.Substring(numPosition, 1));
            }
            //生成验证码
            for (int i = 0; i < length; i++)
            {
                validateNumberStr += validateNums[i].ToString();
            }
            return validateNumberStr;
        }
        /// <summary>
        /// 创建验证码的图片
        /// </summary>
        /// <param name="context">要输出到的page对象</param>
        /// <param name="validateNum">验证码</param>
        public void CreateValidateGraphic(string validateCode, HttpContext context)
        {
            Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22);
            Graphics g = Graphics.FromImage(image);
            try
            {
                //生成随机生成器
                Random random = new Random();
                //清空图片背景色
                g.Clear(Color.White);
                //画图片的干扰线
                for (int i = 0; i < 25; 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);
                }
                Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));
                LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
                 Color.Blue, Color.DarkRed, 1.2f, true);
                g.DrawString(validateCode, font, brush, 3, 2);
                //画图片的前景干扰点
                for (int i = 0; i < 100; 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);
                //保存图片数据
                MemoryStream stream = new MemoryStream();
                image.Save(stream, ImageFormat.Jpeg);
                //输出图片流
                context.Response.Clear();
                context.Response.ContentType = "image/jpeg";
                context.Response.BinaryWrite(stream.ToArray());
            }
            finally
            {
                g.Dispose();
                image.Dispose();
            }
        }
        /// <summary>
        /// 得到验证码图片的长度
        /// </summary>
        /// <param name="validateNumLength">验证码的长度</param>
        /// <returns></returns>
        public static int GetImageWidth(int validateNumLength)
        {
            return (int)(validateNumLength * 12.0);
        }
        /// <summary>
        /// 得到验证码的高度
        /// </summary>
        /// <returns></returns>
        public static double GetImageHeight()
        {
            return 22.5;
        }

        //C# MVC 升级版
        /// <summary>
        /// 创建验证码的图片
        /// </summary>
        /// <param name="containsPage">要输出到的page对象</param>
        /// <param name="validateNum">验证码</param>
        public byte[] CreateValidateGraphic(string validateCode)
        {
            Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22);
            Graphics g = Graphics.FromImage(image);
            try
            {
                //生成随机生成器
                Random random = new Random();
                //清空图片背景色
                g.Clear(Color.White);
                //画图片的干扰线
                for (int i = 0; i < 25; 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);
                }
                Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));
                LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
                 Color.Blue, Color.DarkRed, 1.2f, true);
                g.DrawString(validateCode, font, brush, 3, 2);
                //画图片的前景干扰点
                for (int i = 0; i < 100; 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);
                //保存图片数据
                MemoryStream stream = new MemoryStream();
                image.Save(stream, ImageFormat.Jpeg);
                //输出图片流
                return stream.ToArray();
            }
            finally
            {
                g.Dispose();
                image.Dispose();
            }
        }

其中有两个根据数字和字母生成图片验证码的方法,相信大家能够明白,第一种是常规的WebForm后台调用的方法,可以i直接返回相应的验证码图片,第二种则是专门为ASP.NET准备的方法,其实就是筛检了一点东西,然后传入参数也发生了相应的变化,当然,还有点击“看不清,换一张”的时候,会异步获取新的数据,实现方法在文章末尾。

在MVC中的Controller中如下调用:

 public ActionResult ShowVCode()
        {
            ValidateCode vliateCode = new ValidateCode();
            string code = vliateCode.CreateValidateCode(4);//产生验证码
            Session["validateCode"] = code;
            byte[] buffer = vliateCode.CreateValidateGraphic(code);//将验证码画到画布上.
            return File(buffer, "image/jpeg");
        }

前台页面中如下调用:

<tr>
                                <td>
                                    验证码:
                                </td>
                                <td align="left">
                                    <input type="text" class="login-text" id="code" name="vCode" value="1" />
                                </td>
                            </tr>
                            <tr>
                                <td></td>
                                <td>
                                    <img id="imgCode" src="/Login/ShowVCode?id=2" style="float: left; height: 24px;" />
                                    <div style="float: left; margin-left: 5px; margin-top: 10px;">
                                        <a href="javascript:void(0)" onclick="changeCheckCode();return false;">看不清,换一张</a>
                                    </div>
                                </td>
                            </tr>

实现的效果如下图所示:

点击“看不清换一张”切换验证码代码如下:

    <script type="text/javascript">
        $(function () {
            $("#imgCode").click(changeCheckCode);

        });
        //改变当前图片地址
        function changeCheckCode() {
            var old = $("#imgCode").attr("src");
            var now = new Date();
            var str = old +
            now.getDay() +
            now.getSeconds()  +
            now.getMilliseconds();
            $("#imgCode").attr("src",str );
        }
    </script>

如果对大家有帮助,希望点个赞 哈哈

原文地址:https://www.cnblogs.com/wangyinhang/p/9961561.html

时间: 2024-10-27 07:17:41

C#系统登录随机验证码生成及其调用方法的相关文章

随机验证码生成代码 (转)

随机验证码生成代码 package com.zuidaima.core.util; import java.util.Random; public class RandomUtil { public static final String ALLCHAR = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; public static final String LETTERCHAR = "abc

Django之路 - 实现登录随机验证码

登录验证码是每个网站登录时的基本标配,网上也有很多相应的文章, 但是从生成验证码到 应用到自己的网站上的全步骤,并没有看到很多, 为了节约大家的时间,我把整体步骤写下来, 即拿即用哈 1. 生成随机验证码  随机验证码代码 2. 如何应用到你的django项目中 整个验证码的流程如下 用户访问登录页面,你的后台程序在给用户返回登录页面时,同时生成了验证码图片 用户输入账户信息和验证码数字,提交表单 后台判断用户输入的验证码和你生成的图片信息是否一致,如果一致,就代表验证码是没有问题的 问题就卡在

登录随机验证码

python代码 import random # Image:用来生成图片 ImageDraw:用来在图片上"写字" ImageFont:字体样式 from PIL import Image, ImageDraw, ImageFont # BytesIO能保存数据,并且在取数据时会以二进形式返回, StingIO在取数据时会以字符串形式返回 from io import BytesIO, StringIO # 获取随机三个rgb参数 def get_color(): return ra

python学习--------随机验证码生成

在python中有一个模块random,可以生成随机数,下面就用它做一个简单的随机验证码 import random check_code = "" for i in range(6):     current_number = random.randrange(0,6)     if current_number != i:         temp = chr(random.randrange(65,90))     else:         temp = random.rand

生成用户在登录系统是的随机验证码

C# 随机生成码类:ValidateCode.ashx <%@ WebHandler Language="C#" class="ValidateCode" %> using System; using System.Web; using System.Drawing; using System.Web.SessionState; //一般处理程序中使用session,必须实现一个接口 public class ValidateCode : IHttpHa

相关登录随机验证码公共函数

function randomCode(){ function rand(){ var str="abcdefghijklmnopqrstuvwxyz0123456789"; var arr=str.split(""); var validate=""; var ranNum; for(var i=0;i<4;i++){ ranNum=Math.floor(Math.random()*36); //随机数在[0,35]之间 validate

随机验证码生成(python实现)

需求:生成随机不重复验证码. 代码: #!/usr/bin/env python # encoding: utf-8 """ @author: 侠之大者kamil @file: 200number.py @time: 2016/4/13 23:33 """ import random,string def rand_str(num,length = 7): f = open("Activation_code2.txt",&qu

随机验证码生成

1 public static void CreateValidateGraphic(string validateCode, HttpContext httpContext) 2 { 3 Bitmap img = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 20); 4 Graphics g = Graphics.FromImage(img); 5 try 6 { 7 Random random = new Random(

mob免费短信验证码安卓SDK调用方法

很不错的一款免费验证码平台,支持IOS.安卓,比那些收费的稳定.开发容易.分享给大家,希望大家不要滥用 官网: http://mob.com/ 官方有开发文档,但是有几点要注意的官方没有提到,导致初始化失败:安卓导入SDKSMS Android的jar包出错,项目运行起来报:unfortunately Stopd 下面开始开发安卓项目调用接口API 核心的代码来自官方文档: http://wiki.mob.com/android-%E7%9F%AD%E4%BF%A1sdk%E9%9B%86%E6