我 google了许多验证码生成代码,都不符合 。
要求类似于
https://member.cn.yahoo.com/cnreg/reginfo.html?id=78036要点:
1、每个字符都扭曲(我已经实现了)
2、字符中间有随机曲线,而且曲线有规律:H,A之类的,曲线会穿过字母中间的横线。这个比较困难。
符合要求,另开200分贴相送[email protected]:
为了防止有人说是倒分贴,请您发送时务必抓个图。我接收邮件也抓图为证。没办法,这年头干啥都要有证据。

解决方案 »

  1.   

    验证码生成程序还有很多其它的功能可用来提高能力,例如对于同一个会话在5秒钟内最多只能生成一次(否则就sleep10秒钟才输出),或者干脆给个四则算术题(例如“30-5+81”)。
      

  2.   

    看看www.yinuof.com
    里面的验证码
    是不是符合你的要求:
    可以自定义弯曲的幅度
      

  3.   

    记得在哪里找到过的类似模仿YAHOO的验证码晚上回去找找发给你
      

  4.   

    我有自动生成随即码的代码,就在这里给你代码,记得给分啊.
    <%@ 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>
      

  5.   

    /*******************************************************/
    //                  用于产生验证码图片                 //
    /*******************************************************/
    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>
      

  6.   


    csdn缺少了以前的沉稳了。呵呵  揭帖