用C#编写网页怎么生成验证码

用C#编写网页怎么生成验证码,第1张

using System

using System.Collections.Generic

using System.Drawing

using System.Drawing.Drawing2D

using System.Drawing.Imaging

using System.IO

using System.Linq

using System.Web

using System.Web.Mvc

namespace News.Controllers

{

public class ImageCodeController : Controller

{

//

// GET: /ImageCode/

public ActionResult Index()

{

return View()

}

#region 生成图片验证码

/// <summary>

/// 比较图片中的字符和用户输入的字符

/// </summary>

/// <param name="uCode"></param>

/// <returns></returns>

public string GetCodeResult(string uCode)

{

string oldcode = Session["oldcode"] as string

if (uCode.ToLower() == oldcode.ToLower())

{

return "yes"//用户输入正确

}

else

{

return "no"//用户输入错误

}

}

/// <summary>

/// 生成指定长度的字符串

/// </summary>

/// <returns></returns>

public ActionResult SecurityCode()

{

string code = CreateRandomCode(4)//验证码的字符为4个

Session["oldcode"] = code//生成后,存在session中,用于和用户输入的值比较

return File(CreateValidateGraphic(code), "image/Jpeg")

}

/// <summary>

/// 生成随机的字符串

/// </summary>

/// <param name="codeCount"></param>

/// <returns></returns>

public string CreateRandomCode(int codeCount)

{

string allChar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,a,b,c,d,e,f,g,h,i,g,k,l,m,n,o,p,q,r,F,G,H,I,G,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,s,t,u,v,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

}

/// <summary>

/// 创建验证码图片

/// </summary>

/// <param name="validateCode"></param>

/// <returns></returns>

public byte[] CreateValidateGraphic(string validateCode)

{

Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 16.0), 27)

Graphics g = Graphics.FromImage(image)

try

{

//生成随机生成器

Random random = new Random()

//清空图片背景色

g.Clear(Color.White)

//画图片的干扰线

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

{

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, x2, y1, y2)

}

Font font = new Font("Arial", 13, (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 = 0i <100i++)

{

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()

}

}

#endregion

}

}

----------------------控制器(上)------页面(下)-------------------------------

@{

Layout = null

}

<!DOCTYPE html>

<html>

<head>

<meta name="viewport" content="width=device-width" />

<title>Index</title>

<script src="~/js/jquery-1.7.2.min.js"></script>

</head>

<body>

<div>

<img src="/ImageCode/SecurityCode" id="imageclick" onclick="this.src=this.src+'?'" />

<input type="text" value="" id="uCode" />

<a href="javaScript:" id="click">确定</a>

</div>

</body>

</html>

<script type="text/javascript">

$("#click").click(function () {

//用户输入

var uCode = $.trim($("#uCode").val())

//图片中显示的

//获取点击图片后获取的值,并和用户输入的值进行比较

$.post("/ImageCode/GetCodeResult", { uCode: uCode }, function (data) {

if (data == "yes") {

alert("yes")

} else {

alert("验证码输入错误,请重新输入")

//$("#imageclick").click()//错误后,自动点击图片,生成下一个验证码(可选)

}

})

})

</script>

#include<time.h>

#include<stdlib.h>

main()

{

char a[27]="abcdefghijklmnopqrstuvwxyz"//定义一个包含26个小写字母的字符串

int i,j char output[5]=""

srand((int)time(0))//初始化随机数发生器

for(i=0i<4i++)

{

j= rand()%26//取得0~25的随机数

printf("%c",a[j])//从字符串中随机取一个小写字母,并循环四次,获得四个随机的小写字母 output[i]=a[j]

}

}

<script>

function yzm(){

var arr = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9']

var str = ''

for(var i = 0  i < 4  i ++ )

str += ''+arr[Math.floor(Math.random() * arr.length)]

return str

}

</script>

<button onclick="document.getElementById('yzm').innerHTML = yzm()">重获验证码</button>

<div id="yzm"></div>


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

原文地址: http://outofmemory.cn/yw/7941850.html

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

发表评论

登录后才能评论

评论列表(0条)

保存