ASP验证码的制作方法教程

合集下载

ASP验证码生成

ASP验证码生成

在Web系统中很多时候需要用到校验码,例如我们经常遇到不少电子邮件、论坛的注册过程需要我们输入校验码,这是为了提高安全性。

今天我们就来讲讲如何生成校验码。

使用来生成校验码图像很方便,网上也有不少教程与文章有介绍,但是都讲的太简单了,不够实用。

我来介绍一点自己的思路,算是抛砖引玉吧。

首先我们来看看,生成校验码的一种常见方式:1.生成校验码的字符串2.将该字符串输出为图像具体步骤下面我们就开始简单的例子来介绍这个过程,首先打开,新建一个Web Site,添加一个新的Web Form,取名为VCode.aspx,在其代码文件(VCode.aspx.vb)中添加一个函数generateVCode,此函数用于生成校验码的字符串,具体代码如下:''' <summary>''' 产生随机数(包含字母与数字)用于校验码''' </summary>''' <param name="CodeLength"></param>''' <returns></returns>''' <remarks></remarks>Private Function generateVCode(ByVal CodeLength As Integer) As StringDim VCode As String = String.EmptyDim randObj As New Random()Dim c As Integer = 63For i As Byte = 1 To CodeLengthc = randObj.Next(35)If c >= 10 Thenc += 7End Ifc += 48VCode += Chr(c)NextReturn VCodeEnd Function上面的的函数使用随机数来代表需要产生的校验码,包含数字与大写的字母。

ASP.NET实现验证码图片

ASP.NET实现验证码图片

实现验证码图⽚新建⼀个checkcode.aspx⽂件,页⾯中不⽤写任何东西,在代码中,Page_Load中写⼊如下代码:string chkCode = string.Empty;int ix, iy;ix = 80;iy = 24;//颜⾊列表,⽤于验证码、噪线、噪点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", "MingLiU", "Arial" };//验证码的字符集,去掉了⼀些容易混淆的字符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 < 4; i++){chkCode += character[rnd.Next(character.Length)];}Bitmap bmp = new Bitmap(ix, iy);Graphics g = Graphics.FromImage(bmp);g.Clear(Color.White);//画噪线for (int i = 0; i < 10; i++){int x1 = rnd.Next(ix);int y1 = rnd.Next(iy);int x2 = rnd.Next(ix);int y2 = rnd.Next(iy);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, 14, FontStyle.Bold);Color clr = color[rnd.Next(color.Length)];g.DrawString(chkCode[i].ToString(), ft, new SolidBrush(clr), (float)i * 16 + 2, (float)2);}//画噪点for (int i = 0; i < 50; 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);}//将验证码写⼊SESSIONSession["checkcode"] = chkCode.ToLower();//清除该页输出缓存,设置该页⽆缓存Response.Buffer = true;Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0);Response.Expires = 0;Response.CacheControl = "no-cache";Response.AppendHeader("Pragma", "No-Cache");//将验证码图⽚写⼊内存流,并将其以 "image/Png" 格式输出MemoryStream ms = new MemoryStream();try{bmp.Save(ms, ImageFormat.Png);Response.ClearContent();Response.ContentType = "image/Png";Response.BinaryWrite(ms.ToArray());}finally{//显式释放资源bmp.Dispose();g.Dispose();}在login.aspx中,添加Image控件,设置ImageUrl=“checkcode.aspx" 即可。

asp.ne t验证码

asp.ne t验证码

中的比较完美的验证码要实现如图的效果的验证码,分以下步骤:第一、布局好调用验证码的登录页面(命名:Login.aspx),注意:验证码位置可以是服务器控件Image,也可以是html标签写的<img>,但是图片url就是一个页面(命名:ValidateCode.aspx)(将在下面讲述。

)比如:<asp:Image ID=“vcImg”ImageUrl="~/ValidateCode.aspx" runat="server" />第二、生成类文件(命名:validatedCode)[csharp] view plaincopyprint?using System;using System.Data;using System.Configuration;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Xml.Linq;using System.Drawing;using System.IO;using System.Drawing.Imaging;/// <summary>/// Summary description for validatedCode/// </summary>public class validatedCode{#region 验证码长度(默认6个验证码的长度)int length = 4;public int Length{get { return length; }set { length = value; }}#endregion#region 验证码字体大小(为了显示扭曲效果,默认40像素,可以自行修改) int fontSize = 40;public int FontSize{get { return fontSize; }set { fontSize = value; }}#endregion#region 边框补(默认1像素)int padding = 2;public int Padding{get { return padding; }set { padding = value; }}#endregion#region 是否输出燥点(默认不输出)bool chaos = true;public bool Chaos{get { return chaos; }set { chaos = value; }}#endregion#region 输出燥点的颜色(默认灰色)Color chaosColor = Color.LightGray;public Color ChaosColor{get { return chaosColor; }set { chaosColor = value; }}#endregion#region 自定义背景色(默认白色)Color backgroundColor = Color.White;public Color BackgroundColor{get { return backgroundColor; }set { backgroundColor = value; }}#endregion#region 自定义随机颜色数组Color[] colors = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };public Color[] Colors{get { return colors; }set { colors = value; }}#endregion#region 自定义字体数组string[] fonts = { "Arial", "Georgia" };public string[] Fonts{get { return fonts; }set { fonts = value; }}#endregion#region 自定义随机码字符串序列(使用逗号分隔)string codeSerial = "0,1,2,3,4,5,6,7,8,9,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";public string CodeSerial{get { return codeSerial; }set { codeSerial = value; }}#endregion#region 产生波形滤镜效果private const double PI = 3.1415926535897932384626433832795;private const double PI2 = 6.283185307179586476925286766559;/// <summary>/// 正弦曲线Wave扭曲图片(Edit By )/// </summary>/// <param name="srcBmp">图片路径</param>/// <param name="bXDir">如果扭曲则选择为True</param>/// <param name="nMultValue">波形的幅度倍数,越大扭曲的程度越高,一般为3</param>/// <param name="dPhase">波形的起始相位,取值区间[0-2*PI)</param>/// <returns></returns>public System.Drawing.Bitmap TwistImage(Bitmap srcBmp, bool bXDir, double dMultValue, double dPhase){System.Drawing.Bitmap destBmp = new Bitmap(srcBmp.Width, srcBmp.Height);// 将位图背景填充为白色System.Drawing.Graphics graph = System.Drawing.Graphics.FromImage(destBmp);graph.FillRectangle(new SolidBrush(System.Drawing.Color.White), 0, 0, destBmp.Width, destBmp.Height);graph.Dispose();double dBaseAxisLen = bXDir ? (double)destBmp.Height : (double)destBmp.Width;for (int i = 0; i < destBmp.Width; i++){for (int j = 0; j < destBmp.Height; j++){double dx = 0;dx = bXDir ? (PI2 * (double)j) / dBaseAxisLen : (PI2 * (double)i) / dBaseAxisLen;dx += dPhase;double dy = Math.Sin(dx);// 取得当前点的颜色int nOldX = 0, nOldY = 0;nOldX = bXDir ? i + (int)(dy * dMultValue) : i;nOldY = bXDir ? j : j + (int)(dy * dMultValue);System.Drawing.Color color = srcBmp.GetPixel(i, j);if (nOldX >= 0 && nOldX < destBmp.Width&& nOldY >= 0 && nOldY < destBmp.Height){destBmp.SetPixel(nOldX, nOldY, color);}}}return destBmp;}#endregion#region 生成校验码图片public Bitmap CreateImageCode(string code){int fSize = FontSize;int fWidth = fSize + Padding;int imageWidth = (int)(code.Length * fWidth) + 4 + Padding * 2;int imageHeight = fSize * 2 + Padding;System.Drawing.Bitmap image = new System.Drawing.Bitmap(imageWidth, imageHeight);Graphics g = Graphics.FromImage(image);g.Clear(BackgroundColor);Random rand = new Random();//给背景添加随机生成的燥点if (this.Chaos){Pen pen = new Pen(ChaosColor, 0);int c = Length * 10;for (int i = 0; i < c; i++){int x = rand.Next(image.Width);int y = rand.Next(image.Height);g.DrawRectangle(pen, x, y, 1, 1);}}int left = 0, top = 0, top1 = 1, top2 = 1;int n1 = (imageHeight - FontSize - Padding * 2);int n2 = n1 / 4;top1 = n2;top2 = n2 * 2;Font f;Brush b;int cindex, findex;//随机字体和颜色的验证码字符for (int i = 0; i < code.Length; i++){cindex = rand.Next(Colors.Length - 1);findex = rand.Next(Fonts.Length - 1);f = new System.Drawing.Font(Fonts[findex], fSize, System.Drawing.FontStyle.Bold);b = new System.Drawing.SolidBrush(Colors[cindex]);if (i % 2 == 1){top = top2;}else{top = top1;}left = i * fWidth;g.DrawString(code.Substring(i, 1), f, b, left, top);}//画一个边框边框颜色为Color.Gainsborog.DrawRectangle(new Pen(Color.Gainsboro, 0), 0, 0, image.Width - 1, image.Height - 1);g.Dispose();//产生波形(Add By )image = TwistImage(image, true, 8, 4);return image;}#endregion#region 将创建好的图片输出到页面public void CreateImageOnPage(string code, HttpContext context){System.IO.MemoryStream ms = new System.IO.MemoryStream();Bitmap image = this.CreateImageCode(code);image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);context.Response.ClearContent();context.Response.ContentType = "image/Jpeg";context.Response.BinaryWrite(ms.GetBuffer());ms.Close();ms = null;image.Dispose();image = null;}#endregion#region 生成随机字符码public string CreateVerifyCode(int codeLen){if (codeLen == 0){codeLen = Length;}string[] arr = CodeSerial.Split(',');string code = "";int randValue = -1;Random rand = new Random(unchecked((int)DateTime.Now.Ticks));for (int i = 0; i < codeLen; i++){randValue = rand.Next(0, arr.Length - 1);code += arr[randValue];}return code;}public string CreateVerifyCode(){return CreateVerifyCode(0);}#endregion}PS:虽然不是我自己写的,但是可分享给大家。

ASP 图片验证码

ASP  图片验证码

ASP 图片验证码为了保证我们网站的安全,在登录或者发布信息时最好增加验证码项,本案例实现图片验证码,在网上比较常见,而且更加安全,本案例包括2个文件,checkc ode.asp 负责生成和输出验证码,code.asp文件实现验证码的验证功能。

(1)我们建立一个名为checkode的文件夹,在该文件夹下新建名为checkcod e.asp文件。

(2)该文件中可以定义干扰点出现的概率,字符数量,图片宽度等参数,以便调整验证码的验证难度。

同时将获得到的随机数写入Session("GetCode")变量中,(4)生成的图片的相关参数,包含图片的坐标,随机转动角度,数字的颜色,图像的高度,宽度等详细参数。

详细说明请参阅程序中的注释。

代码如下所示:(5)再次在文件夹下建立一个名为code.asp文件。

该文件用于输出验证码,和进行验证码判断,当输入的验证码与系统生成的验证码一致时,将跳转到页面“hcode.asp”,将看到效果,每次页面验证码图片会产生新的验证码,如图7-13所示:码图7-15 再次点击图片时刷新验证码 图7-16 未通过验证时效果(7)当我们在验证码右侧的文本框中输入的数字,与系统显示的验证码不一致时,单击【提交】按钮后,将调用“if cstr(request.Form("code"))=cstr(Session("Ch eckCode")) then ”判断,此时不成立未能通过验证,执行“else ”程序,将弹出警告对话框,效果如图7-16所示。

(8)当输入正确的验证码,单击【提交】按钮时,“if cstr(request.Form("code "))=cstr(Session("CheckCode")) then “判断成立,将执行“response.Redirect(" ")”程序,跳转到 页面,效果如图7-17所示。

ASP.NET验证码实现(附源码)

ASP.NET验证码实现(附源码)

验证码实现(附源码)⾸先看下效果实现(由于gif屏幕录制软件是即时找的,有些失祯)代码主要就是绘制验证码类的实现using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Drawing;using System.IO;namespace SecurityCodePic{public class DrawingSecurityCode{/// <summary>/// ⽣成验证码,并返回/// </summary>/// <returns></returns>public string GetSecurityCode(int n){string code = GenerateCheckCode(n);CreateCheckCodeImage(code);return code;}/// <summary>/// 动态⽣成指定数⽬的随机数或字母/// </summary>/// <param name="num">整数</param>/// <returns>返回验证码字符串</returns>private string GenerateCheckCode(int num){int number;//定义变量char code;string checkCode = String.Empty; //空字符串,只读Random random = new Random(); //定义随机变量实例for (int i=0; i < num;i++ ){//利⽤for循环⽣成指定数⽬的随机数或字母number = random.Next(); //返回⼀个⼩于指定的最⼤值的⾮负的随机数 next有三个构造函数if (number % 2 == 0){//产⽣⼀个⼀位数code = (char)('0' + (char)(number % 10));}else{ //产⽣⼀个⼤写字母code = (char)('A'+(char)(number % 26));}checkCode += code.ToString();}return checkCode;}/// <summary>/// 根据验证码字符串⽣成验证码图⽚/// </summary>/// <param name="checkCode">验证码字符串</param>private void CreateCheckCodeImage(string checkCode){if (checkCode == null || checkCode.Trim() == String.Empty) return;// 引⽤System.Drawing类库Bitmap myImage = new Bitmap(80, 30);//⽣成⼀个指定⼤⼩的位图Graphics graphics = Graphics.FromImage(myImage); //从⼀个位图⽣成⼀个画布try{graphics.Clear(Color.White); //清除整个绘画⾯并以指定的背景⾊填充,这⾥是把背景⾊设为⽩⾊Random random = new Random(); //实例化⼀个伪随机数⽣成器//画图⽚的前景噪⾳点,这⾥有100个for (int i = 0; i < 100; i++){int x = random.Next(myImage.Width);int y = random.Next(myImage.Height);myImage.SetPixel(x, y, Color.FromArgb(random.Next()));//指定坐标为x,y处的像素的颜⾊}//画图⽚的背景噪⾳线,这⾥为2条for (int i = 0; i < 2; i++){int x1 = random.Next(myImage.Width);int x2 = random.Next(myImage.Width);int y1 = random.Next(myImage.Height);int y2 = random.Next(myImage.Height);graphics.DrawLine(new Pen(Color.Black), x1, y1, x2, y2); //绘制⼀条坐标x1,y1到坐标x2,y2的指定颜⾊的线条,这⾥的线条为⿊⾊ }Font font = new Font("Arial", 15, FontStyle.Bold); //定义特定的⽂本格式,这⾥的字体为Arial,⼤⼩为15,字体加粗//根据矩形、起始颜⾊和结束颜⾊以及⽅向⾓度产⽣⼀个LinearGradientBrush实例---线性渐变System.Drawing.Drawing2D.LinearGradientBrush brush =new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, myImage.Width, myImage.Height),//在坐标0,0处实例化⼀个和myImage同样⼤⼩的矩形Color.Blue, Color.Red, 1.2f, true);//绘制⽂本字符串graphics.DrawString(checkCode, font, brush, 2, 2);//绘制有坐标对、宽度和⾼度指定的矩形---画图⽚的边框线graphics.DrawRectangle(new Pen(Color.Silver), 0, 0, myImage.Width - 1, myImage.Height - 1);//创建其⽀持存储器为内存的流MemoryStream ms = new MemoryStream();//将此图像以指定格式保存到指定的流中myImage.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); //这⾥是以gif的格式保存到内存中HttpContext.Current.Response.ClearContent(); //清除缓冲区流中的所有内容输出HttpContext.Current.Response.ContentType = "image/Gif"; //获取或设置输出流的HTTP MIME类型HttpContext.Current.Response.BinaryWrite(ms.ToArray()); //将⼀个⼆进制字符串写⼊HTTP输出流}finally{//释放占⽤资源graphics.Dispose();myImage.Dispose();}}}}然后使⽤SecurityCode.ashx⽂件调⽤上⾯类的⽅法实现using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace SecurityCodePic{/// <summary>/// SecurityCode1 的摘要说明/// </summary>public class SecurityCode1 : IHttpHandler{public void ProcessRequest(HttpContext context){DrawingSecurityCode sc = new DrawingSecurityCode();string SecurityCode = sc.GetSecurityCode(6);}public bool IsReusable{get{return false;}}}}最后就是页⾯图⽚路径的引⽤了<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SecurityCode_Test.aspx.cs" Inherits="SecurityCodePic.SecurityCode_Test" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head runat="server"><title>验证码的实现</title><style type="text/css">#VCodeImg { cursor: pointer;}</style></head><body><form id="form1" runat="server"><div><img id="VCodeImg" src="SecurityCode.ashx" alt="验证码" onclick="javascript:RefreshCode();" /></div></form><script type="text/javascript">function RefreshCode() {var random = Math.random();var img = document.getElementById("VCodeImg");img.src = "SecurityCode.ashx?" + random; //加上⽆意义的随机参数,浏览器才会认为是新地址,就会重新读取数据}</script></body></html>以上就是本⽂的全部,对了,还有源码下载分享给⼤家,欢迎⼤家下载。

Asp.net(C#)实现验证码功能代码

Asp.net(C#)实现验证码功能代码

(C#)实现验证码功能代码新建⼀个专门⽤来创建验证码图⽚的页⾯ValidateCode.aspx它的后台cs⽂件代码如下:PageLoad复制代码代码如下:private void Page_Load(object sender, System.EventArgs e){string checkCode = CreateRandomCode(4);Session["CheckCode"] = checkCode;CreateImage(checkCode);}其中CreateRandomCode是⾃定义的函数,参数代表验证码位数复制代码代码如下:private string CreateRandomCode(int codeCount){string allChar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z";string[] allCharArray = allChar.Split(',');string randomCode = "";int temp = -1; Random rand = new Random();for (int i = 0; i < codeCount; i++){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;}CreateImage也是⼀个⾃定义的函数,⽤于⽣成图复制代码代码如下:private void CreateImage(string checkCode){int iwidth = (int)(checkCode.Length * 11.5);System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 20);Graphics g = Graphics.FromImage(image);Font f = new System.Drawing.Font("Arial", 10, System.Drawing.FontStyle.Bold);Brush b = new System.Drawing.SolidBrush(Color.White);//g.FillRectangle(new System.Drawing.SolidBrush(Color.Blue),0,0,image.Width, image.Height); g.Clear(Color.Blue);g.DrawString(checkCode, f, b, 3, 3);Pen blackPen = new Pen(Color.Black, 0);Random rand = new Random();for (int i=0;i<5;i++){int y = rand.Next(image.Height);g.DrawLine(blackPen,0,y,image.Width,y);}System.IO.MemoryStream ms = new System.IO.MemoryStream();image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);Response.ClearContent();Response.ContentType = "image/Jpeg";Response.BinaryWrite(ms.ToArray());g.Dispose();image.Dispose();}//g.FillRectangle(new System.Drawing.SolidBrush(Color.Blue),0,0,image.Width, image.Height); g.Clear(Color.Blue);这两种⽅法都可以改变⽣成图⽚的背景颜⾊。

验证码代码

验证码代码

asp网页中加验证码的详细方法此前发布了“ASP网页中如何加验证码(绝对可行)”后,不断有网友通过各种方式向我反映他们按照我说的方法做了之后但并未成功,后来与部分网友通过QQ交流或看过他们的源文件后,发现都是一些小“错误”引起的,为了使更多的人能操作成功,特重发此文,并且对一些细节做了补充完善!一些网站的留言本或者网页的评论栏经常收到很多群发的垃圾信息,加上验证码情况虽然不能完全杜绝垃圾信息,但垃圾信息绝对会减少很多,下面就具体介绍一下asp 网页中实现验证码功能的方法:1,下载文件/articleimg/2005/08/2671/imgchk.rar (如果此下载连接失效,请联系本人)该压缩包为 imgchk 文件夹,其中有三个文件:validatecode.asp,validatebody.fix,validatehead.fix主要即是为生成验证码服务的。

将解压后得到的 imgchk 文件夹直接释放在需要在某页添加验证码的同目录下(比如addnew.asp 需要添加验证码,该文件在 cnbruce 文件夹下,则将 imgchk 文件夹同时释放到 cnbruce 文件夹中)2,添加显示验证码和输入框需要添加验证码的页面中添加如下代码:<input name='validatecode' type='text'size='5'>&nbsp;<img src='imgchk/validatecode.asp' align='absmiddle'border='0'>说明:具体操作中可以用网页编辑软件打开需要添加验证码的页面,然后在需要显示验证码的位置输入验证码这三个汉字(这主要是给别人起一个提示作用,相当于一项内容的标题),然后选中这三个字,点网页编辑软件中的代码,找到反白显示的验证码这三个字,然后将文本光标在它后面点一下,再将上面的这行代码复制粘贴到那里。

如何在ASP程序中添加验证码

如何在ASP程序中添加验证码

如何在ASP程序中添加验证码!今天很高兴,终于解决了asp连接本的验证码问题,特拿来和大家分享。

1.首先咱们需要一个code.asp的文件,文件的代码如下:<%Option ExplicitResponse.buffer=trueCall Com_CreatValidCode("GetCode")Sub Com_CreatValidCode(pSN)Response.Expires = -1Response.AddHeader "Pragma","no-cache"Response.AddHeader "cache-ctrol","no-cache"Response.ContentType = "Image/bmp"RandomizeDim i, ii, iiiConst cOdds = 6 ' 杂点出现的机率Const cAmount = 10 ' 文字数量Const cCode = "0123456789abcd"' 颜色的数据(字符,背景)Dim vColorData(1)vColorData(0) = ChrB(0) & ChrB(0) & ChrB(255) ' 蓝0,绿0,红0(黑色)vColorData(1) = ChrB(255) & ChrB(255) & ChrB(255) ' 蓝250,绿236,红211(浅蓝色)' 随机产生字符Dim vCode(4), vCodesFor i = 0 To 3vCode(i) = Int(Rnd * cAmount)vCodes = vCodes & Mid(cCode, vCode(i) + 1, 1)NextSession(pSN) = vCodes '记录入Session' 字符的数据Dim vNumberData(9)vNumberData(0) = "11100001111101111011110111101111010010111101001011110100101111010010111 10111101111011110111110000111"vNumberData(1) = "11110111111100011111111101111111110111111111011111111101111111110111111 11101111111110111111100000111"vNumberData(2) = "11100001111101111011110111101111111110111111110111111110111111110111111 11011111111011110111100000011"vNumberData(3) = "11100001111101111011110111101111111101111111001111111111011111111110111 10111101111011110111110000111"vNumberData(4) ="11111011111111101111111100111111101011111101101111110110111111000000111 11110111111111011111111000011"vNumberData(5) = "11000000111101111111110111111111010001111100111011111111101111111110111 10111101111011110111110000111"vNumberData(6) = "11110001111110111011110111111111011111111101000111110011101111011110111 10111101111011110111110000111"vNumberData(7) = "11000000111101110111110111011111111011111111101111111101111111110111111 11101111111110111111111011111"vNumberData(8) = "11100001111101111011110111101111011110111110000111111011011111011110111 10111101111011110111110000111"vNumberData(9) = "11100011111101110111110111101111011110111101110011111000101111111110111 11111101111011101111110001111"' 输出图像文件头Response.BinaryWrite ChrB(66) & ChrB(77) & ChrB(230) & ChrB(4) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) &_ChrB(0) & ChrB(0) & ChrB(54) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(40) & ChrB(0) &_ ChrB(0) & ChrB(0) & ChrB(40) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(10) & ChrB(0) &_ ChrB(0) & ChrB(0) & ChrB(1) & ChrB(0)' 输出图像信息头Response.BinaryWrite ChrB(24) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(176) & ChrB(4) &_ChrB(0) & ChrB(0) & ChrB(18) & ChrB(11) & ChrB(0) & ChrB(0) & ChrB(18) & ChrB(11) &_ ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) &_ ChrB(0) & ChrB(0)For i = 9 To 0 Step -1 ' 历经所有行For ii = 0 To 3 ' 历经所有字For iii = 1 To 10 ' 历经所有像素' 逐行、逐字、逐像素地输出图像数据If Rnd * 99 + 1 < cOdds Then ' 随机生成杂点Response.BinaryWrite vColorData(0)ElseResponse.BinaryWrite vColorData(Mid(vNumberData(vCode(ii)), i * 10 + iii, 1))End IfNextNextNextEnd Sub%>将代码保持起来,放入和你需要加入的asp程序中,比如我是加入link系统里,就直接丢在add.asp同一个目录了。

ASP实现加法验证码的方法

ASP实现加法验证码的方法
实现加法验证码吗?下面我们就给大家详细介绍一下吧!我 们积累了一些经验,在此拿出来与大家分享下,请大家互相指正。 Const FontColor = &amp;H000000 ‘ 字体颜色 Const BgColor = &amp;HFFCCFF ‘ 背景颜色 Call CreatValidCode(“GetCode”) Sub CreatValidCode(pSN) Dim x, Jpeg Randomize x = Array(1+Int(Rnd()*9), Int(Rnd()*10), 1+Int(Rnd()*9), Int(Rnd()*10), 0, 0, “+”) x(4) = x(0)*10 + x(1) x(5) = x(2)*10 + x(3)
Response.AddHeader “cache-ctrol”, “no-cache” Response.AddHeader “Content-Disposition”,”inline; filename=vcode.jpg” Jpeg.SendBinary Jpeg.Close Set Jpeg = Nothing End Sub %>; 相信大家已经了解 ASP 实现加法验证码了吧!
‘Session(pSN) = CStr(Eval(x(4) &amp; x(6) &amp; x(5))) Session(pSN) = CStr(x(4) + x(5)) Set Jpeg = Server.CreateObject(“Persits.Jpeg”) Jpeg.New 100,20,BgColor Jpeg.Quality=100 With Jpeg.Canvas .Font.Bold = True .Font.Size = 16 .Font.Rotation = 0 .Font.Family = “楷体_GB2312” .Font.Color = FontColor .PrintText 4, 3, CStr(x(0)) .PrintText 14, 3, CStr(x(1))

ASP.NET验证码控件(附详细用法)

ASP.NET验证码控件(附详细用法)

共享一款验证码控件(附详细用法)最近在完善我的毕业设计——(C#)实现的三层构架的二手交易系统,觉得有必要加上验证码,这样网站的安全性会提升一些。

于是利用百度、谷歌反复搜索,终于找到了一款比较牛叉的验证码控件。

原作者不详,这里附上一个地址>>>。

程序我做了一些小小的修改。

按原文所说的操作,根本编译不了。

原文的用法可以查看上面的链接地址,这里我贴出我自己的用法。

我将两个类整合到一个.cs文件中了(这里命名为AuthCode.cs),程序如下:using System;using System.Collections.Generic;using ponentModel;using System.Text;using System.Web;using System.Web.UI.WebControls;using System.Web.UI;using System.Web.SessionState;using System.Drawing;using System.IO;namespace AuthCode{[ToolboxData("<{0}:AuthCode runat=server></{0}:AuthCode>")]public class AuthCode : WebControl{///〈summary>///获得验证码的值///〈/summary>///〈returns>验证码〈/returns>public string GetValue(){return HttpContext.Current.Session["value"].ToString();}[Bindable(true)][Category("Appearance")][Description("验证码字符长度")][DefaultValue("ss")][Localizable(true)]//长度internal static int mySize;public int MySize{get { return AuthCode.mySize; }set{AuthCode.mySize = value;}}public AuthCode(): base(HtmlTextWriterTag.Img)//重写父类的构造(输出流的HTML标记){ }protected override void AddAttributesToRender(HtmlTextWriter writer){base.AddAttributesToRender(writer);//将要输出的的HTML标签的属性和样式添加到指定的HtmlTextWriter中writer.AddStyleAttribute(HtmlTextWriterStyle.Cursor, "pointer");//添加样式writer.AddAttribute("onclick", "this.src='img.jd?id='+Math.random()");//添加jsVerifyImg.jdwriter.AddAttribute(HtmlTextWriterAttribute.Src, "img.jd");writer.AddAttribute("alt", "点击刷新");}}public class AuthCodeHttpHander : IHttpHandler, IRequiresSessionState{///<summary>///返回验证码字符///</summary>///<param name="codeCount">验证码长度</param>///<returns></returns>private string GetRandomNumberString(int codeCount){string strChoice ="2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,U,V,W,X,Y,Z";string[] strResult = strChoice.Split(new Char[] { ',' });string strReturn = "";Random rnd = new Random();for (int i = 0; i < codeCount; i++){int j = rnd.Next(strResult.Length);//随机数不能大于数组的长度strReturn = strReturn + strResult[j].ToString();}return strReturn;}private Color GetColor(){return Color.Black;}private Bitmap CreateImage(string str_AuthCode){int width = str_AuthCode.Length * 13;int height = 20;Random rad = new Random();Bitmap bmp = new Bitmap(width, height);Graphics grp = Graphics.FromImage(bmp);//在图片上绘制图形grp.Clear(Color.White);//填充bmp的背景色grp.DrawRectangle(new Pen(Color.Red, 1), 0, 0, width - 1, height - 1);//绘制边框int num = width * height;for (int i = 0; i < num; i+=3)//在图片的指定坐标上画上有颜色的圆点{int x = rad.Next(width);int y = rad.Next(height);int r = rad.Next(255);int g = rad.Next(255);int b = rad.Next(255);Color c = Color.FromArgb(r, g, b);bmp.SetPixel(x, y, c);//在图片的指定坐标上画上有颜色的圆点}Font f = new Font("宋体", 12, FontStyle.Bold);//定义字体 Brush br = new SolidBrush(Color.Black);//定义画笔的颜色及字体的颜色for (int i = 0; i < str_AuthCode.Length; i++){string s = str_AuthCode.Substring(i, 1);//单个单个的将字画到图片上Point p = new Point(i * 12 + rad.Next(3), rad.Next(3) + 1);//字体出现的位置(坐标)grp.DrawString(s, f, br, p);//绘制字符串}grp.Dispose();return bmp;//返回}///<summary>///是否可以处理远程的HTTP请求///</summary>public bool IsReusable{get { return true; }}///<summary>///将验证码图片发送给WEB浏览器///</summary>///<param name="context"></param>public void ProcessRequest(HttpContext context){int size = AuthCode.mySize; //Int32.Parse((String)context.Session["Size"]); MemoryStream ms = new MemoryStream(); // 创建内存流(初始长度为0 自动扩充)string NumStr = GetRandomNumberString(size);//获得验证码字符 context.Session.Add("value", NumStr);//将验证码字符保存到session里面 Bitmap theBitmap = CreateImage(NumStr);//获得验证码图片theBitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);//将位图写入内存流context.Response.ClearContent(); //清除缓冲区里的所有内容输出context.Response.ContentType = "image/jpeg"; //需要输出图象信息要修改HTTP头context.Response.BinaryWrite(ms.ToArray()); //将内存流写入HTTP输出流theBitmap.Dispose(); //释放资源ms.Close();//释放资源ms.Dispose();//释放资源context.Response.End();}}}我是这样使用这个验证码控件的:1:修改web.config 文件在<system.web> </system.web>间加入下面的代码:<httpHandlers><add verb="*"path="*.jd"type="AuthCode.AuthCodeHttpHander"/></httpHandlers>2: “开始”—“运行”—“cmd” ,用下面的两条命令编译AuthCode.cs文件为.DLL文件。

ASP验证码的制作方法教程汇总

ASP验证码的制作方法教程汇总

ASP 验证码的制作方法教程一、 BMP 图知识学习经过一个星期的学习和研究,终于做出了自己的验证码,在这感谢网友的知识分享受,今天我把我的经验和心得分享给网友们,有什么不懂的,可以QQ184202117 问我。

首先你的弄懂BMP图的存储原理,下面我们来看下图:首先,需要知道bitmap-file header BMP文件里面的字节数据有四个局部,分别是:〕、位图信息头〔bitmap-information header位图文件头〔〕、彩色表〔colortable 〕、定义位图的字节〔即位图数据Data Body〕阵列但是对于我们现在要讨论的24 位真彩的BMP 文件来说,里面不存在彩色表,因此整个里面只剩下三个局部。

如上图所示,是一个24 位真彩图的字节数据〔使用的UltraEdit翻开〕的开始局部截图〔里面的数据均为16 进制,即每两个数字代表一个字节〕,表上面的顶栏0~f 和左侧的000000XX0h是用来方面看数据的〔也可以方便记数〕,比方数据表的第一行的第三个字节数据 9E 的位置就是00000000h + 2 = 00000002h,这就是为什么在一些解释中定位中使用000000XXXh 的原因。

我们可以看到数据表被三种颜色的线条划分为16 个局部:1~4 局部〔红色线划分〕是位图文件头;5~15 局部〔开始用蓝色线条划分局部〕是位图信息头;16局部〔既就是用绿色线划分的后面所有数据〕是位图的字节阵列;如上所说,因为是24 位真彩图,所以不存在彩色表。

下来详细说明每一局部代表什么含义:〔首先在这里强调一下!!!!在上图中的字节数据中,拿第二局部表示文件大小的字节数据〔9E 40 09 00 〕来说,其16 进制真正的顺序和上面显示的是相反的,即就是上图表示的文件大小为0009499E 〔用 16 进制表示〕,因此在读取文件数据操作时,就就需要注意了!!!!〕1~4 局部〔位图文件头〕:1: 42 4D 这是 BMP 文件的标示,是 ASCII 的 BM 的16 进制的值;〔大小: 2byte 〕2 :9E 40 09 00 用字节表示的整个文件的大小;〔大小: 4 byte = 1 dword 〕3 :00 00 00 00 保存,设置为 0 ;〔大小:4 byte = 1 dword 〕4 :36 00 00 00 从文件开始到位图数据开始之间的数据(bitmap data) 之间的偏移量;〔大小: 4 byte = 1 dword〕5~15 局部〔位图信息头〕:5 :28 00 00 00 位图信息头(Bitmap Info Header) 的长度;〔大小: 4 byte = 1 dword 〕6 :F7 01 00 00 位图的宽度,以像素为单位;〔大小: 4 byte = 1 dword 〕〔它的16 进制大小应反过来,所以10 进制大小是503 〕7 :91 01 00 00 位图的高度,以像素为单位;〔大小: 4 byte = 1 dword 〕8 :01 00 位图的位面数;〔大小: 2 byte = 1 word 〕9 :18 00 每个像素的位数;〔大小: 2 byte = 1 word 〕10 : 00000000 压缩说明〔0 表示不压缩〕〔大小: 4 byte = 1 dword 〕11 : 68400900 用字节数表示的位图数据的大小。

ASP.NETCore使用SkiaSharp实现验证码的示例代码

ASP.NETCore使用SkiaSharp实现验证码的示例代码

Core使⽤SkiaSharp实现验证码的⽰例代码前⾔本⽂并没有实现⼀个完成的验证码样例,只是提供了在当前.NET Core 2.0下使⽤Drawing API的另⼀种思路,并以简单Demo 的形式展⽰出来。

SkiaSkia是⼀个开源的⼆维图形库,提供各种常⽤的API,并可在多种软硬件平台上运⾏。

⾕歌Chrome浏览器、Chrome OS、安卓、⽕狐浏览器、⽕狐操作系统以及其它许多产品都使⽤它作为图形引擎。

Skia由⾕歌出资管理,任何⼈都可基于BSD免费软件许可证使⽤Skia。

Skia开发团队致⼒于开发其核⼼部分,并⼴泛采纳各⽅对于Skia的开源贡献。

SkiaSharpSkiaSharp是由Mono发起,基于⾕歌的Skia图形库,实现的⼀个跨平台的2D图形.NET API绑定。

提供⼀个全⾯的2D API,可⽤于跨移动、服务器和桌⾯模式的图形渲染和图像处理。

skiasharp提供PCL和平台特定的绑定:1. .NET Core / .NET Standard 1.32. Xamarin.Android3. Xamarin.iOS4. OS5. Xamarin.Mac6. Windows Classic Desktop (Windows.Forms / WPF)7. Windows UWP (Desktop / Mobile / Xbox / HoloLens)使⽤SkiaSharpdotnet add package SkiaSharp --version 1.59.3验证码前使⽤SkiaSharp实现⽂本绘图功能,代码如下:internal static byte[] GetCaptcha(string captchaText){byte[] imageBytes = null;int image2d_x = 0;int image2d_y = 0;SKRect size;int compensateDeepCharacters = 0;using (SKPaint drawStyle = CreatePaint()){compensateDeepCharacters = (int)drawStyle.TextSize / 5;if (System.StringComparer.Ordinal.Equals(captchaText, captchaText.ToUpperInvariant()))compensateDeepCharacters = 0;size = SkiaHelpers.MeasureText(captchaText, drawStyle);image2d_x = (int)size.Width + 10;image2d_y = (int)size.Height + 10 + compensateDeepCharacters;}using (SKBitmap image2d = new SKBitmap(image2d_x, image2d_y, SKColorType.Bgra8888, SKAlphaType.Premul)){using (SKCanvas canvas = new SKCanvas(image2d)){canvas.DrawColor(SKColors.Black); // Clearusing (SKPaint drawStyle = CreatePaint()){canvas.DrawText(captchaText, 0 + 5, image2d_y - 5 - compensateDeepCharacters, drawStyle);}using (SKImage img = SKImage.FromBitmap(image2d)){using (SKData p = img.Encode(SKEncodedImageFormat.Png, 100)){imageBytes = p.ToArray();}}}}return imageBytes;} Core输出图像:[HttpGet("/api/captcha")]public IActionResult Captcha(){var bytes = SkiaCaptcha.Captcha.GetCaptcha("hello world");return File(bytes, "image/png");}参考以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

asp.net一般处理程序(.ashx)动态生成验证码案例。

asp.net一般处理程序(.ashx)动态生成验证码案例。

⼀般处理程序(.ashx)动态⽣成验证码案例。

{使⽤⼀般处理程序动态⽣成验证码}1.新建WebSite项⽬,添加⼀般处理程序命名为 yzm.ashx,添加如下代码:public void ProcessRequest(HttpContext context){//将context.Response.ContentType = "text/plain";修改为context.Response.ContentType = "image/JPEG";context.Response.ContentType = "image/JPEG";using (System.Drawing.Bitmap bitmap =new System.Drawing.Bitmap(150, 50)){using (System.Drawing.Graphics grapgics =System.Drawing.Graphics.FromImage(bitmap)){//测试⽰例/*grapgics.DrawString("哈喽",new System.Drawing.Font("宋体", 20),System.Drawing.Brushes.Blue, new System.Drawing.PointF(0, 0));System.Drawing.Pen pen = (System.Drawing.Pen)System.Drawing.Pens.Red.Clone();pen.Width = 3;grapgics.DrawEllipse(pen, new System.Drawing.Rectangle(20, 20, 10, 10));bitmap.Save(context.Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);*///⽣成随机数Random random = new Random();int code = random.Next();string strCode = code.ToString();//存sessionHttpContext.Current.Session["code"] = strCode;grapgics.DrawString(strCode,new System.Drawing.Font("宋体", 20),System.Drawing.Brushes.Blue, new System.Drawing.PointF(0, 0));bitmap.Save(context.Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);}}//本⾝就有的context.Response.Write("Hello World");}2.新建webApplication。

密码验证登陆代码及操作步骤

密码验证登陆代码及操作步骤

第一步:在</HEAD>后边,在<BODY >前加入以下语句<!--#include file="conn.asp"-->第二步:把原有的语句: <form name="form1" method="post" action=""> 改为<form name="form1" method="post" action="index.asp?action=Login"> 第三步:在</BODY>前加入以下语句<%If Request("action")="Login" ThenCall Login()End If%><% Sub Login()Dim yhmDim pwdyhm=Request.Form("zhanghao")pwd=Request.Form("mima")If yhm="" Or pwd="" ThenResponse.Write "<script>alert('请你输入你的用户名和密码');history.go(-1);</script>"Response.endElseSet Rs = Server.CreateObject("ADODB.Recordset")Sql="Select * From [口令] Where number='"&yhm&"'"Rs.Open Sql,conn,2,3if rs.bof or rs.eof thenResponse.Write "<script>alert('用户名错误!请你正确输入你的用户名');history.go(-1);</script>"Response.endelse if yhm=Rs("number") and pwd=Rs("pwd") Then Response.Redirect "main.asp"ElseResponse.Write "<script>alert('密码错误!请你正确输入你的密码');history.go(-1);</script>"Response.endEnd IfEnd Ifend ifRs.CloseSet Rs=nothing End Sub%>。

ASP生成XBM图可用作验证码

ASP生成XBM图可用作验证码

这个程序主要是先⽣成⼀个随机数,然后根据⽣成的随机数经过变换后作为XBM图⽚的内容,最后显⽰这个图⽚. 验证时中要获取输⼊的数字和Session("validatecode")⽐较,如果相等则通过验证(还要注意⼀下相⽐较的两数据的类型保持⼀致)。

如何显⽰⽣成的图⽚呢? 关于XBM图的格式信息,看这⾥ /developer/tech/story/0,2000081602,39134972,00.htm xbm.asp的代码如下 程序代码: '开启缓冲 Response.Buffer = True With Response .Expires = -1 .AddHeader "Pragma","no-cache" .AddHeader "cache-ctrol","no-cache" End With Dim num Randomize num = Int(7999 * Rnd + 2000) Session("validateCode") = num Dim Image Dim Width, Height Dim digtal Dim Length Dim sort Dim hc Length = 4 hc = chr(13) & chr(10) Redim sort(Length) digital = "" For I = 1 To Length - Len(num) digital = digital & "0" Next For I = 1 To Len(num) digital = digital & Mid(num, I, 1) Next For I = 1 To Len(digital) sort(I) = Mid(digital, I, 1) Next Width = 8 * Len(digital) Height = 10 Response.ContentType = "image/x-xbitmap" Image = "#define counter_width " & Width & hc Image = Image & "#define counter_height " & Height & hc Image = Image & "static unsigned char counter_bits[] = {" & hc For I = 1 To Height For J = 1 To Length Image = Image & a(sort(J),I) & "," Next Next Image = Left(Image, Len(Image) - 1) Image = Image & "};" & hc Response.Write Image %>。

ASP.NETWebApi实现Token验证

ASP.NETWebApi实现Token验证

WebApi实现Token验证基于令牌的认证我们知道WEB⽹站的⾝份验证⼀般通过session或者cookie完成的,登录成功后客户端发送的任何请求都带上cookie,服务端根据客户端发送来的cookie来识别⽤户。

WEB API使⽤这样的⽅法不是很适合,于是就有了基于令牌的认证,使⽤令牌认证有⼏个好处:可扩展性、松散耦合、移动终端调⽤⽐较简单等等,别⼈都⽤上了,你还有理由不⽤吗?下⾯我们花个20分钟的时间来实现⼀个简单的WEB API token认证:Step 1:安装所需的NuGet包:打开NuGet包管理器控制台,然后输⼊如下指令:Install-Package Microsoft.AspNet.WebApi.Owin -Version 5.1.2Install-Package Microsoft.Owin.Host.SystemWeb -Version 2.1.0Install-Package Microsoft.AspNet.Identity.Owin -Version 2.0.1Install-Package Microsoft.Owin.Cors -Version 2.1.0Install-Package EntityFramework -Version 6.0.0Step 2 在项⽬根⽬录下添加Owin“Startup”类1using System;2using System.Web.Http;34using Owin;5using Microsoft.Owin;6using Microsoft.Owin.Security.OAuth;7using SqlSugar.WebApi;89 [assembly: OwinStartup(typeof(WebApi.Startup))]10namespace WebApi11 {12public class Startup13 {14public void Configuration(IAppBuilder app)15 {16 HttpConfiguration config = new HttpConfiguration();17 ConfigureOAuth(app);1819 WebApiConfig.Register(config);20 eCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);21 eWebApi(config);22 }2324public void ConfigureOAuth(IAppBuilder app)25 {26 OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()27 {28 AllowInsecureHttp = true,29 TokenEndpointPath = new PathString("/token"),30 AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),31 Provider = new SimpleAuthorizationServerProvider()32 };33 eOAuthAuthorizationServer(OAuthServerOptions);34 eOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());35 }36 }37 }View CodeStep 3:在项⽬根⽬录下添加验证类 SimpleAuthorizationServerProvider,为了简单⽤户的验证部分我们省略掉;1using System.Threading.Tasks;2using System.Security.Claims;3using Microsoft.Owin.Security.OAuth;45namespace WebApi6 {7///<summary>8/// Token验证9///</summary>10public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider11 {12public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)13 {14await Task.Factory.StartNew(() => context.Validated());15 }1617public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)18 {19await Task.Factory.StartNew(() => context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" }));20/*21 * 对⽤户名、密码进⾏数据校验22 using (AuthRepository _repo = new AuthRepository())23 {24 IdentityUser user = await _repo.FindUser(erName, context.Password);2526 if (user == null)27 {28 context.SetError("invalid_grant", "The user name or password is incorrect.");29 return;30 }31 }*/3233var identity = new ClaimsIdentity(context.Options.AuthenticationType);34 identity.AddClaim(new Claim("sub", erName));35 identity.AddClaim(new Claim("role", "user"));3637 context.Validated(identity);3839 }40 }41 }View CodeStep 4:让CORS起作⽤在 Web API中启⽤OAuth的Access Token验证⾮常简单,只需在相应的Controller或Action加上[Authorize]标记1 [Authorize]2 [HttpGet, Route("product/getList")]3public List<Entity.Sys_User> GetProductList()4 {5throw new NotImplementedException();6 }View CodeStep 5 : 请求 Token获取token, POST http://localhost:23477/token参数BODY x-www-form-urlencoded 格式:grant_type=passwordusername=adminpassword=123456返回状态200 结果为Step 5 调⽤api只要在http请求头中加上Authorization:bearer Token就可以成功访问API就成功了:GET http://localhost:58192/api/testapi/testapiAuthorization : bearer T5jF97t5n-rBkWcwpiVDAlhzXtOvV7Jw2NnN1Aldc--xtDrvWtqLAN9hxJN3Fy7piIqNWeLMNm2IKVOqmmC0X5_s8MwQ6zufUDbvF4Bg5OHoHTKHX6NmZGNrU4mjpCuPLtSbT5bh_gFOZHoIXXIKmqD3Wu1MyyKKNhj9XPEIkd9bl4E9AZ1wAt4dyUxmPV结果为:。

利用ASP验证身份证号是否正确的代码

利用ASP验证身份证号是否正确的代码

利用ASP验证身份证号是否正确的代码。

我们要验证身份证号是否正确,就得先了解身份证号的含意。

身份证号都代表什么意思?1、号码的结构公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。

排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

2、地址码(前六位数)表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。

3、出生日期码(第七位至十四位)表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。

4、顺序码(第十五位至十七位)表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。

5、校验码(第十八位数)(1)十七位数字本体码加权求和公式S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和Ai:表示第i位置上的身份证号码数字值Wi:表示第i位置上的加权因子Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2(2)计算模Y = mod(S, 11)(3)通过模得到对应的校验码Y: 0 1 2 3 4 5 6 7 8 9 10校验码: 1 0 X 9 8 7 6 5 4 3 2所以我们就可以大致写一个函数来校验是否正确了。

验证身份证号ASP代码函数如下Function IDCheck(e)IDCheck = truearrVerifyCode = Split(1,0,x,9,8,7,6,5,4,3,2, ,)Wi = Split(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2, ,)Checker = Split(1,9,8,7,6,5,4,3,2,1,1, ,)If Len(e) < 15 Or Len(e) = 16 Or Len(e) = 17 Or Len(e) > 18 Then 'IDCheck= 身份证号共有 15 码或18位IDCheck = FalseExit FunctionEnd IfDim AiIf Len(e) = 18 ThenAi = Mid(e, 1, 17)ElseIf Len(e) = 15 ThenAi = eAi = Left(Ai, 6) & 19 & Mid(Ai, 7, 9)End IfIf Not IsNumeric(Ai) Then'IDCheck= 身份证除最后一位外,必须为数字!IDCheck = FalseExit FunctionEnd IfDim strYear, strMonth, strDaystrYear = CInt(Mid(Ai, 7, 4))strMonth = CInt(Mid(Ai, 11, 2))strDay = CInt(Mid(Ai, 13, 2))BirthDay = Trim(strYear) + - + Trim(strMonth) + - + Trim(strDay)If IsDate(BirthDay) ThenIf DateDiff(yyyy,Now,BirthDay)<-140 or cdate(BirthDay)>date() Then 'IDCheck= 身份证输入错误!IDCheck = FalseExit FunctionEnd IfIf strMonth > 12 Or strDay > 31 ThenIDCheck = False'IDCheck= 身份证输入错误!Exit FunctionEnd IfElse'IDCheck= 身份证输入错误!IDCheck = FalseExit FunctionEnd IfDim i, TotalmulAiWiFor i = 0 To 16TotalmulAiWi = TotalmulAiWi + CInt(Mid(Ai, i + 1, 1)) * Wi(i)NextDim modValuemodValue = TotalmulAiWi Mod 11Dim strVerifyCodestrVerifyCode = arrVerifyCode(modValue) Ai = Ai & strVerifyCodeIDCheck = AiIf Len(e) = 18 And e <> Ai Then'IDCheck= 身份证号码输入错误!IDCheck = FalseExit FunctionEnd IfEnd Function。

ASP.NET生成图形验证码的方法详解

ASP.NET生成图形验证码的方法详解

本文实例讲述了生成图形验证码的方法。

分享给大家供大家参考,具体如下:通常生成一个图形验证码主要有3个步骤:(1)随机产生一个长度为N的随机字符串,N的值可由开发可由开发人员自行设置。

该字符串可以包含数字、字母等。

(2)将随机生成的字符串创建成图片,并显示。

(3)保存验证码。

新建一个页面为default.aspx, &nbsp;放置一个TextBox控件和一个Image控件,TextBox 控件用于输入生成的字符串,Image控件用于显示字符串,它的图片就为生成的图形验证码imageUrl=“/default.aspx”;default.aspx页面的源代码为:&lt;form id="form1" runat="server"&gt;&nbsp; &lt;div&gt;&nbsp; &nbsp; &lt;asp:TextBox ID="TextBox1" runat="server"&gt;&lt;/asp:TextBox&gt;&nbsp; &nbsp; &lt;asp:Image ID="Image1" imageUrl=“/default.aspx”runat="server" /&gt;&nbsp; &lt;/div&gt;&lt;/form&gt;图形验证码的代码为:using System;using System.Configuration;using System.Data;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Xml.Linq;using System.Drawing;public partial class _Default : System.Web.UI.Page&nbsp;{&nbsp; protected void Page_Load(object sender, EventArgs e)&nbsp; {&nbsp; &nbsp; if (!IsPostBack)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; string validateNum = CreateRandomNum(4);&nbsp; &nbsp; &nbsp; CreateImage(validateNum);&nbsp; &nbsp; &nbsp; Session["ValidateNum"] = validateNum;&nbsp; &nbsp; }&nbsp; }&nbsp; //生产随机数&nbsp; private string CreateRandomNum(int NumCount)&nbsp; {&nbsp; &nbsp; string allChar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,O,P,Q,R,S,T,U,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,m,n,o,p,q,s, t,u,w,x,y,z";&nbsp; &nbsp; string[] allCharArray = allChar.Split(',');//拆分成数组&nbsp; &nbsp; string randomNum = "";&nbsp; &nbsp; int temp = -1; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //记录上次随机数的数值,尽量避免产生几个相同的随机数&nbsp; &nbsp; Random rand = new Random();&nbsp; &nbsp; for (int i = 0; i &lt; NumCount; i++)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; if (temp != -1)&nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; rand = new Random(i*temp*((int)DateTime.Now.Ticks));&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; int t = rand.Next(35);&nbsp; &nbsp; &nbsp; if (temp == t)&nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return CreateRandomNum(NumCount);&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; temp = t;&nbsp; &nbsp; &nbsp; randomNum += allCharArray[t];&nbsp; &nbsp; }&nbsp; &nbsp; return randomNum;&nbsp; }&nbsp; //生产图片&nbsp; private void CreateImage(string validateNum)&nbsp; {&nbsp; &nbsp; if (validateNum == null || validateNum.Trim() == string.Empty)&nbsp; &nbsp; &nbsp; return;&nbsp; &nbsp; //生成BitMap图像&nbsp; &nbsp; System.Drawing.Bitmap image = new System.Drawing.Bitmap(validateNum.Length*12+12,22);&nbsp; &nbsp; Graphics g = Graphics.FromImage(image);&nbsp; &nbsp; try&nbsp; &nbsp; {&nbsp;&nbsp; &nbsp; &nbsp; //生成随机生成器&nbsp; &nbsp; &nbsp; Random random = new Random();&nbsp; &nbsp; &nbsp; //清空图片背景&nbsp; &nbsp; &nbsp; g.Clear(Color.White);&nbsp; &nbsp; &nbsp; //画图片的背景噪音线&nbsp; &nbsp; &nbsp; for (int i = 0; i &lt; 25; i++)&nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; int x1 = random.Next(image.Width);&nbsp; &nbsp; &nbsp; &nbsp; int x2 = random.Next(image.Width);&nbsp; &nbsp; &nbsp; &nbsp; int y1 = random.Next(image.Height);&nbsp; &nbsp; &nbsp; &nbsp; int y2 = random.Next(image.Height);&nbsp; &nbsp; &nbsp; &nbsp; g.DrawLine(new Pen(Color.Silver),x1,x2,y1,y2);&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; Font font = new System.Drawing.Font("Arial",12,(System.Drawing.FontStyle.Bold|System.Drawing.FontStyle.Ital ic));&nbsp; &nbsp; &nbsp; System.Drawing.Drawing2D.LinearGradientBrush brush=new System.Drawing.Drawing2D.LinearGradientBrush(newRectangle(0,0,image.Width,image.Height),Color.Blue,Color.DarkRed,1.2f,true);&nbsp; &nbsp; &nbsp; g.DrawString(validateNum,font,brush ,2,2);&nbsp; &nbsp; &nbsp; //画图片的前景噪音点&nbsp; &nbsp; &nbsp; for( int i=0;i&lt;100;i++)&nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; int x=random.Next(image.Width);&nbsp; &nbsp; &nbsp; &nbsp; int y=random.Next(image.Height);&nbsp; &nbsp; &nbsp; &nbsp; image.SetPixel(x,y,Color.FromArgb(random.Next()));&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; //画图片的边框线&nbsp; &nbsp; &nbsp; g.DrawRectangle(new Pen(Color.Silver),0,0,image.Width-1,image.Height-1);&nbsp; &nbsp; &nbsp; System.IO.MemoryStream ms=new System.IO.MemoryStream();&nbsp; &nbsp; &nbsp; //将图像保存到指定流&nbsp; &nbsp; &nbsp; image.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);&nbsp; &nbsp; &nbsp; Response.ClearContent();&nbsp; &nbsp; &nbsp; Response.ContentType="image/Gif";&nbsp; &nbsp; &nbsp; Response.BinaryWrite(ms.ToArray());&nbsp; &nbsp; }&nbsp; &nbsp; finally&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; g.Dispose();&nbsp; &nbsp; &nbsp; image.Dispose();&nbsp; &nbsp; }&nbsp; }}希望本文所述对大家程序设计有所帮助。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ASP验证码的制作方法教程一、BMP图知识学习经过一个星期的学习和研究,终于做出了自己的验证码,在这感谢网友的知识分享受,今天我把我的经验和心得分享给网友们,有什么不懂的,可以QQ184201917问我。

首先你的弄懂BMP图的存储原理,下面我们来看下图:首先,需要知道BMP 文件里面的字节数据有四个部分,分别是:位图文件头(bitmap-file header )、位图信息头(bitmap-information header )、彩色表(colortable )、定义位图的字节(即位图数据Data Body )阵列但是对于我们现在要讨论的24 位真彩的BMP 文件来说,里面不存在彩色表,因此整个里面只剩下三个部分。

如上图所示,是一个24 位真彩图的字节数据(使用的UltraEdit 打开)的开始部分截图(里面的数据均为16 进制,即每两个数字代表一个字节),表上面的顶栏0~f 和左侧的000000XX0h 是用来方面看数据的(也可以方便记数),比如数据表的第一行的第三个字节数据9E 的位置就是00000000h + 2 = 00000002h ,这就是为什么在一些解释中定位中使用000000XXXh 的原因。

我们可以看到数据表被三种颜色的线条划分为16 个部分:1~4 部分(红色线划分)是位图文件头;5~15 部分(开始用蓝色线条划分部分)是位图信息头;16 部分(既就是用绿色线划分的后面所有数据)是位图的字节阵列;如上所说,因为是24 位真彩图,所以不存在彩色表。

下来详细说明每一部分代表什么含义:(首先在这里强调一下!!!!在上图中的字节数据中,拿第二部分表示文件大小的字节数据(9E 40 09 00 )来说,其16 进制真正的顺序和上面显示的是相反的,即就是上图表示的文件大小为0009499E (用16 进制表示),因此在读取文件数据操作时,就就需要注意了!!!!)1~4 部分(位图文件头):1: 42 4D 这是BMP 文件的标示,是ASCII 的BM 的16 进制的值;(大小:2byte )2 :9E 40 09 00 用字节表示的整个文件的大小;(大小:4 byte = 1 dword )3 :00 00 00 00 保留,设置为0 ;(大小:4 byte = 1 dword )4 :36 00 00 00 从文件开始到位图数据开始之间的数据(bitmap data) 之间的偏移量;(大小:4 byte = 1 dword )5~15 部分(位图信息头):5 :28 00 00 00 位图信息头(Bitmap Info Header) 的长度;(大小:4 byte = 1dword )6 :F7 01 00 00 位图的宽度,以像素为单位;(大小:4 byte = 1 dword )(它的16 进制大小应反过来,所以10 进制大小是503 )7 :91 01 00 00 位图的高度,以像素为单位;(大小:4 byte = 1 dword )8 :01 00 位图的位面数;(大小:2 byte = 1 word )9 :18 00 每个像素的位数;(大小:2 byte = 1 word )10 :00 00 00 00 压缩说明(0 表示不压缩)(大小:4 byte = 1 dword )11 :68 40 09 00 用字节数表示的位图数据的大小。

该数必须是4 的倍数(至于为什么下面会有解释)(大小:4 byte = 1 dword )12 :C4 0E 00 00 用像素/ 米表示的水平分辨率;(大小:4 byte = 1 dword )13 :C4 0E 00 00 用像素/ 米表示的垂直分辨率;(大小:4 byte = 1 dword )14: 00 00 00 00 位图使用的颜色数;(大小:4 byte = 1 dword )15-4-9 三分钟解析24位真彩BMP格式文件- 推酷/articles/FvaIVj 3/715 :00 00 00 00 指定重要的颜色数。

当该域的值等于颜色数时,表示所有颜色都一样重要;(大小:4 byte = 1 dword )16 部分(位图字节阵列):16 :从上面的绿色划分线以后均为字节阵列数据,用于绘制。

而且每三个字节表示一个像素。

描述完了上述的图的分块含义,现在就说一说BMP 中的一些需要注意的方面,首先在位图字节阵列数据中BMP 存储的图像数据是从左下角的像素开始,到最后的右上角像素。

其中还有一个比较主要的概念,而且与绘图读取数据有关的概念是“扫描行”;扫描行:扫描行指图像在存储器中一行像素的字节数据,图像扫描行的大小,取决于图象的颜色数目和用象素表示的图象宽度。

BMP 格式还有个非常重要的规定:要求每一扫描行的字节数据必须能被4 整除,也就是dword 对齐(dword 是一种数据类型,长度为4 个字节)。

如果图像的一行字节数不能被 4 整除,就需要在每行的末尾补齐0 以达到规定。

因此在我们的读取数据中需要根据BMP 图像的宽度来判断是否被补0 ,判断方法就是先判断一行的字节数是否可以被4 整除,如果整除则不需要补0 ,如果没有整除,则求出补的0 的个数(具体计算方法是,bu_0_number = width( 像素) * 3 % 4 ),那么就知道在每一行的末尾都补了bu_0_number 个0 ,因此我们在读取时绘制图片时就要忽略这些数据。

(补充:求每一行的字节数size = width * 3 )经过上面分析,我们已经可以着手写程序了,因为整个过程已经在我们脑袋中了。

首先从上面可以看出,位图文件头部分的数据只有宽度和高度部分的数据对我们有作用(对于我们已经知道需要解析的图片是24 位真彩BMP 图片),下来有用的就是位图字节阵列部分的数据,里面每三个代表一个像素的RGB 值(里面补0 的部分忽略),字节存储的图片像素的顺序是从左下到右上,这样我们只需要读一组RGB 值设置画笔颜色,然后绘制一个像素;读一组RGB 值设置颜色再绘制一个像素就可以了二、学习弄清网上大量的10X100的BMP的ASP验证程序1、把下面的程序复制粘贴到checkcode.asp中<%Option ExplicitResponse.buffer=true'开启缓存NumCodeFunction NumCode()Response.Expires = -1Response.AddHeader "Pragma","no-cache"Response.AddHeader "cache-ctrol","no-cache"On Error Resume NextDim zNum,i,jDim Ados,Ados1Randomize timer'生成随机四位数字:zNum = cint(8999*Rnd+1000)'传递给sessionSession("CheckCode")= zNum'该for循环是将随机数字放入一个下标3的数组,便于提供给后面的阵列变换Dim zimg(4),NStrNStr=cstr(zNum)For i=0 To 3zimg(i)=cint(mid(NStr,i+1,1))NextDim Pos'定义二个ADODB.Stream binary对象,作图像数据操作之用:Set Ados=Server.CreateObject("Adodb.Stream")Ados.Mode=3Ados.Type=1Ados.OpenSet Ados1=Server.CreateObject("Adodb.Stream")Ados1.Mode=3Ados1.Type=1Ados1.Open'载入0~9的数字数据10x100的,Gbr的阵列数据,每个320字节,10个数字3200byte Ados.LoadFromFile(Server.mappath("body.Fix"))Ados1.write Ados.read(1280)'第一个for循环,按生成的随机数字顺序从10X100的数字阵列中提取出相应的四个数字,但是竖排的数字阵列For i=0 To 3Ados.Position=(9-zimg(i))*320Ados1.Position=i*320Ados1.write ados.read(320)Next'清空已经用完的ADOS的数据,调入替换新的图像头54字节的头文件Ados.LoadFromFile(Server.mappath("head.fix"))Pos=lenb(Ados.read())'指定Pos位置,即可再偏移54字节的位置添加图形数据,第二个for 循环,进行数字的阵列变换,由竖排的块转换为横排的数字块,方法是隔320字节抽取4次30字节写入ados对象,再抽取偏移第二行的图像数据,30字节是因为bmp 宽大于长时无00 00的行结束标记Ados.Position=PosFor i=0 To 9 Step 1For j=0 To 3Ados1.Position=i*32+j*320Ados.Position=Pos+30*j+i*120Ados.write ados1.read(30)NextNext'直接向客户端发送图像数据Response.ContentType = "image/BMP"Ados.Position=0Response.BinaryWrite Ados.read()Ados.Close:set Ados=nothingAdos1.Close:set Ados1=nothingEnd Function'Asp code Created by Web Team V37 2003-7-25%>2、把下面程序复制粘贴到code.asp中<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>图片验证码程序</title></head><body><%'如果验证码不为空,说明提交了表单if request.Form("code")<>"" then'如果输入的验证码与随机产生的验证码相同则重新定向页面到http:// if cstr(request.Form("code"))=cstr(Session("CheckCode")) thenresponse.Redirect("")'否则弹出错误警告对话框,终止程序运行elseresponse.write "<script>alert('验证失败,请重新输入验证码');history.back();</script>"response.endend ifend if%><form id="form1" name="form1" method="post" action=""><table width="289" border="0" cellspacing="0" cellpadding="0"><tr><td width="70">验证码:</td><td width="103"><input name="code" type="text" id="code" size="10" maxlength="4" /></td><td width="72"><img src="checkcode.asp"></td><td width="44"><input type="submit" name="Submit" value="提交" /></td></tr></table></form></body></html>三、建自己的ASP验证码①准备工具photoshop②UltraEdit先在photoshop中建一个宽30像素高300像素的图片,分辨率选72,RGB8位,OK再填上0-9十个数,保存文件名为body.bmp,(参数选windows,24位),最后如下图:再新建一个宽120像素高30像素的图片,不用填任何东西,保存文件名为head.bmp。

相关文档
最新文档