我 google了许多验证码生成代码,都不符合 。
要求类似于
https://member.cn.yahoo.com/cnreg/reginfo.html?id=78036要点:
1、每个字符都扭曲(我已经实现了)
2、字符中间有随机曲线,而且曲线有规律:H,A之类的,曲线会穿过字母中间的横线。这个比较困难。
符合要求,另开200分贴相送[email protected]:
为了防止有人说是倒分贴,请您发送时务必抓个图。我接收邮件也抓图为证。没办法,这年头干啥都要有证据。
要求类似于
https://member.cn.yahoo.com/cnreg/reginfo.html?id=78036要点:
1、每个字符都扭曲(我已经实现了)
2、字符中间有随机曲线,而且曲线有规律:H,A之类的,曲线会穿过字母中间的横线。这个比较困难。
符合要求,另开200分贴相送[email protected]:
为了防止有人说是倒分贴,请您发送时务必抓个图。我接收邮件也抓图为证。没办法,这年头干啥都要有证据。
里面的验证码
是不是符合你的要求:
可以自定义弯曲的幅度
<%@ import namespace="System"%>
<%@ import namespace="System.io"%>
<%@ import namespace="System.Drawing"%>
<%@ import namespace="System.Drawing.Imaging"%>
<script language="vbscript" runat="server">
Sub Page_Load(Sender as object,e as eventargs)
'RndNum是一个自定义函数
dim VNum as string=""
Session("VRandomData")=VNum
VNUM=RndNum(4)
while Session("VRandomData")="" '防止产生空SESSION
VNUM=RndNum(4)
Session("VRandomData")=VNum
ValidateCode(VNum)
end while
End Sub
'生成图象验证码函数
Sub ValidateCode(VNum)
Dim Img as System.Drawing.Bitmap
Dim g as Graphics
Dim ms as MemoryStream
dim gheight as integer=Int(Len(VNum)*11.5)
'gheight为图片宽度,根据字符长度自动更改图片宽度
img=new BitMap(Gheight,20)
g=Graphics.FromImage(img)
g.DrawString(VNum,(New Font("Arial",10)),(New SolidBrush(color.blue)),3,3)'在矩形内绘制字串(字串,字体,画笔颜色,左上x.左上y)
ms=New MemoryStream()
img.Save(ms,ImageFormat.Png)
Response.ClearContent() '需要输出图象信息 要修改HTTP头
Response.ContentType="image/Png"
Response.BinaryWrite(ms.ToArray())
g.Dispose()
img.Dispose()
Response.End()
End Sub '--------------------------------------------
'函数名称:RndNum
'函数参数:VcodeNum--设定返回随机字符串的位数
'函数功能:产生数字和字符混合的随机字符串
Function RndNum(VcodeNum)
dim Vchar as string="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"
dim VcArray() as string=split(Vchar,",") '将字符串生成数组
dim VNum as string=""
dim i as byte
For i=1 to VcodeNum
Randomize
VNum=VNum & VcArray(Int((ubound(VcArray)+1)*Rnd))
Next
Return VNum
End Function
</script>
// 用于产生验证码图片 //
/*******************************************************/
using System;
using System.Data;
using System.Configuration;
using System.Collections;
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;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Drawing.Text;
using System.Drawing;
using System.Text;
using System.IO;public partial class RandomValidateImage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//输出带有随机验证码的图片
CreateCheckCodeImage(GenerateCheckCode());
} /// <summary>
/// 生成随机验证码字符串
/// </summary>
/// <returns>生成随机验证码字符串</returns>
private string GenerateCheckCode()
{
int number;
string strCode = string.Empty; //随机数种子
Random random = new Random(); for (int i = 0; i < 4; i++) //雅正码长度为4
{
//随机的整数
number = random.Next(); //字符从0-9,A-Z中随机产生,对应的ASCII码分别为 48-57,65-90
number = number % 36;
if (number < 10)
{
number += 48; }
else
{
number += 55; }
strCode+=((char)number).ToString();
} //在 Cookie 中保存验证码
Response.Cookies.Add(new HttpCookie("CheckCode",strCode));
return strCode; }
/// <summary>
/// 根据验证码输出图片
/// </summary>
/// <param name="checkCode">产生的随机验证码</param>
private void CreateCheckCodeImage(string checkCode)
{
//若验证码为空,则直接返回
if (checkCode == null || checkCode == String.Empty)
return; //根据验证码长度确定输出图片的长度
System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((double)(checkCode.Length * 15))-4, 20); //创建 Graphics 对象
Graphics g = Graphics.FromImage(image); try
{
//产生随机数种子
Random random = new Random(); //清空图片背景色
g.Clear(Color.White); //画图片的背景噪音线 5条
for (int i = 0; i < 5; i++)
{
//噪音线的起点坐标(x1,y1)和终点坐标(x2,y2)
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.Gray), x1, y1, x2, y2);
} //输出图片中验证码的字体:13号Arial,粗斜体
Font font = new Font("Arial", 13, (FontStyle.Bold | FontStyle.Italic)); //线性渐变画刷
LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
Color.Black, Color.DarkBlue, 1.2f, true); //画验证码字符串
g.DrawString(checkCode, font, brush, 2,1); //画图片前景噪音点30个
for (int i = 0; i < 30; i++)
{
//随机产生点的坐标(x,y)
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.SaddleBrown), 0, 0, image.Width - 1, image.Height - 1); //创建内存流用于输出图片
using (MemoryStream ms = new MemoryStream())
{
//图片格式为 Jpeg
image.Save(ms, ImageFormat.Jpeg); //清除缓冲区中的所有输出
Response.ClearContent(); //输出流的 HTTP MIME 类型为“image/Jpeg”
Response.ContentType = "image/Jpeg"; //输出图片的二进制流
Response.BinaryWrite(ms.ToArray());
}
} finally
{
//释放Bitmap对象和Graphics对象
g.Dispose();
image.Dispose();
}
}}另外写个空的aspx文件:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="RandomValidateImage.aspx.cs" Inherits="RandomValidateImage" %><!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>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
csdn缺少了以前的沉稳了。呵呵 揭帖