zoukankan      html  css  js  c++  java
  • 登录验证码

         //// <summary>
            /// 生成验证码
            /// </summary>
            /// <param name="length">指定验证码的长度</param>
            /// <returns></returns>
            public static 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="chkCode">验证码字符</param>
            /// <returns></returns>
            public static byte[] CreateValidateCodePic(string chkCode)
            {
                //颜色列表,用于验证码、噪线、噪点 
                Color[] color = { Color.Black, Color.Red, Color.Blue, Color.Green, Color.Orange, Color.Brown, Color.Brown, Color.DarkBlue };
                //字体列表,用于验证码 
                string[] font = { "Times New Roman", "MS Mincho", "Book Antiqua", "Gungsuh", "PMingLiU", "Impact" };
                Bitmap bmp = new Bitmap(100, 40);
                Graphics g = Graphics.FromImage(bmp);
                g.Clear(Color.White);
                Random rnd = new Random();
                //画噪线 
                for (int i = 0; i < 10; i++)
                {
                    int x1 = rnd.Next(100);
                    int y1 = rnd.Next(40);
                    int x2 = rnd.Next(100);
                    int y2 = rnd.Next(40);
                    Color clr = color[rnd.Next(color.Length)];
                    g.DrawLine(new Pen(clr), x1, y1, x2, y2);
                }
                //画验证码字符串 
                for (int i = 0; i < chkCode.Length; i++)
                {
                    string fnt = font[rnd.Next(font.Length)];
                    Font ft = new Font(fnt, 18);
                    Color clr = color[rnd.Next(color.Length)];
                    g.DrawString(chkCode[i].ToString(), ft, new SolidBrush(clr), (float)i * 20 + 8, (float)8);
                }
                //画噪点 
                for (int i = 0; i < 100; i++)
                {
                    int x = rnd.Next(bmp.Width);
                    int y = rnd.Next(bmp.Height);
                    Color clr = color[rnd.Next(color.Length)];
                    bmp.SetPixel(x, y, clr);
                }
    
                //将验证码图片写入内存流,并将其以 "image/Png" 格式输出 
                MemoryStream ms = new MemoryStream();
                try
                {
                    bmp.Save(ms, ImageFormat.Png);
                    return ms.ToArray();
    
                }
                finally
                {
                    //显式释放资源 
                    bmp.Dispose();
                    g.Dispose();
                }
            }        
            /// <summary>
            /// 创建验证码字符
            /// </summary>
            /// <param name="length">验证码长度</param>
            /// <returns></returns>
            public string CreateValidateCode(int length)
            {
                string code = qdatmUtils.CreateValidateCode(length);
                return code;
            }
    
            /// <summary>
            /// 创建验证码图片
            /// </summary>
            /// <param name="code">图片中的验证码字符</param>
            /// <returns></returns>
            public byte[] CreateValidateCodePic(string code)
            {
                var bytes = qdatmUtils.CreateValidateCodePic(code);
                return bytes;
            }
    
            /// <summary>
            /// 生成验证码
            /// </summary>
            /// <returns></returns>
            public ActionResult CheckCode()
            {
                string code = CreateValidateCode(4);
                Session["ValidateCode"] = code;
                byte[] bytes = CreateValidateCodePic(code);
                return File(bytes, @"image/png");
            }    
            /// <summary>
            /// 验证码验证
            /// </summary>
            /// <param name="code"></param>
            [HttpPost]
            public ContentResult CheckCode(string code)
            {
                bool flag = Session["ValidateCode"].ToString().ToUpper().Equals(code.ToUpper());
                if (flag)
                {
                    return Content("true");
                }
                else
                {
                    return Content("false");
                }
            }

    前台代码:

    <div class="input-group" style="display:none" id="vcode">
        <input type="text" class="" name="ValidateCode" id="ValidateCode" placeholder="验证码" required maxlength="10">
        <img src="/Account/CheckCode?ID=1" id="imgCode" alt="单击可刷新" onclick="ClickRemoveChangeCode()" />
    </div>

    js:

    function ClickRemoveChangeCode() {
                var code = $("#imgCode").attr("src");
                $("#imgCode").attr("src", code + "1");
                $("#ValidateCode").val("");
            }
    $(document).ready(function () {
                $('#loginForm').validate({
                    rules: {
                        ValidateCode: {
                            required: true,
                            maxlength: 4,
                            remote: {
                                url: "/Account/CheckCode",
                                type: "post",
                                dataType: "json",
                                data: { code: function () { return $("#ValidateCode").val(); } }
                            }
                        }
                    },
                    messages: {
                        ValidateCode: {
                            required: "验证码不能为空",
                            maxlength: "最大长度4个字符",
                            remote: "验证码错误"
                        }
                    }

     创建带字母的验证码:

    /// <summary>
            /// 创建验证码字母
            /// </summary>
            /// <param name="length">验证码的长度</param>
            /// <returns></returns>
            public static string CreateValidateCode(int length = 4)
            {
                string chkCode = string.Empty;
    
                //验证码的字符集,去掉了一些容易混淆的字符 
                char[] character = { '2', '3', '4', '5', '6', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'W', 'X', 'Y' };
                Random rnd = new Random();
                //生成验证码字符串 
                for (int i = 0; i < length; i++)
                {
                    chkCode += character[rnd.Next(character.Length)];
                }
                return chkCode;
            }
  • 相关阅读:
    [日常] PHP库函数fgetss的BUG
    [PHP] 算法-选择排序的PHP实现
    [PHP] 算法-数值的整数次方的PHP实现
    [PHP] 算法-顺时针打印矩阵的PHP实现
    [PHP] 算法-字符串的左循环的PHP实现
    [PHP] 算法-将一个字符串转换成一个整数的PHP实现
    [PHP] 算法-字符串的全排列的PHP实现
    [PHP]算法-堆排序的PHP实现
    [PHP]算法-二进制中1的个数的PHP实现
    [PHP]算法-旋转数组的最小值的PHP实现
  • 原文地址:https://www.cnblogs.com/MrZheng/p/6407805.html
Copyright © 2011-2022 走看看