当前位置: 移动技术网 > IT编程>开发语言>c# > C#验证码的创建与使用示例

C#验证码的创建与使用示例

2019年07月18日  | 移动技术网IT编程  | 我要评论

本文实例讲述了c#验证码的创建与使用方法。分享给大家供大家参考,具体如下:

1、c#创建验证码

① 创建获取验证码页面(validatecode.aspx)

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

② 编写获取验证码代码(validatecode.aspx.cs)

/// <summary>
/// 验证码类型(0-字母数字混合,1-数字,2-字母)
/// </summary>
private string validatecodetype = "0";
/// <summary>
/// 验证码字符个数
/// </summary>
private int validatecodecount = 4;
/// <summary>
/// 验证码的字符集,去掉了一些容易混淆的字符
/// </summary>
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' };
protected void page_load(object sender, eventargs e)
{
  //取消缓存
  response.bufferoutput = true;
  response.cache.setexpires(datetime.now.addmilliseconds(-1));
  response.cache.setcacheability(system.web.httpcacheability.nocache);
  response.appendheader("pragma", "no-cache");
  //获取设置参数
  if (!string.isnullorempty(request.querystring["validatecodetype"]))
  {
    validatecodetype = request.querystring["validatecodetype"];
  }
  if (!string.isnullorempty(request.querystring["validatecodecount"]))
  {
    int.tryparse(request.querystring["validatecodecount"], out validatecodecount);
  }
  //生成验证码
  this.createcheckcodeimage(generatecheckcode());
}
private string generatecheckcode()
{
  char code ;
  string checkcode = string.empty;
  system.random random = new random();
  for (int i = 0; i < validatecodecount; i++)
  {
    code = character[random.next(character.length)];
    // 要求全为数字或字母
    if (validatecodetype == "1")
    {
      if ((int)code < 48 || (int)code > 57)
      {
        i--;
        continue;
      }
    }
    else if (validatecodetype == "2")
    {
      if ((int)code < 65 || (int)code > 90)
      {
        i--;
        continue;
      }
    }
    checkcode += code;
  }
  response.cookies.add(new system.web.httpcookie("checkcode", checkcode));
  this.session["checkcode"] = checkcode;
  return checkcode;
}
private void createcheckcodeimage(string checkcode)
{
  if (checkcode == null || checkcode.trim() == string.empty)
    return;
  system.drawing.bitmap image = new system.drawing.bitmap((int)math.ceiling((checkcode.length*15.0+40)), 23);
  system.drawing.graphics g = system.drawing.graphics.fromimage(image);
  try
  {
    //生成随机生成器
    random random = new random();
    //清空图片背景色
    g.clear(system.drawing.color.white);
    //画图片的背景噪音线
    for (int i = 0; i < 25; i++)
    {
      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 system.drawing.pen(system.drawing.color.silver), x1, y1, x2, y2);
    }
    system.drawing.font font = new system.drawing.font("arial", 14, (system.drawing.fontstyle.bold | system.drawing.fontstyle.italic));
    system.drawing.drawing2d.lineargradientbrush brush = new system.drawing.drawing2d.lineargradientbrush(new system.drawing.rectangle(0, 0, image.width, image.height), system.drawing.color.blue, system.drawing.color.darkred, 1.2f, true);
    int cyspace = 16;
    for (int i = 0; i < validatecodecount; i++)
    {
      g.drawstring(checkcode.substring(i, 1), font, brush, (i + 1) * cyspace, 1);
    }
    //画图片的前景噪音点
    for (int i = 0; i < 100; i++)
    {
      int x = random.next(image.width);
      int y = random.next(image.height);
      image.setpixel(x, y, system.drawing.color.fromargb(random.next()));
    }
    //画图片的边框线
    g.drawrectangle(new system.drawing.pen(system.drawing.color.silver), 0, 0, image.width - 1, image.height - 1);
    system.io.memorystream ms = new system.io.memorystream();
    image.save(ms, system.drawing.imaging.imageformat.gif);
    response.clearcontent();
    response.contenttype = "image/gif";
    response.binarywrite(ms.toarray());
  }
  finally
  {
    g.dispose();
    image.dispose();
  }
}

2、验证码的使用

① 验证码的前段显示代码

复制代码 代码如下:
<img src="/validatecode.aspx?validatecodetype=1&0.011150883024061309" onclick="this.src='/validatecode.aspx?validatecodetype=1&'+math.random();" id="imgvalidatecode" alt="点击刷新验证码" title="点击刷新验证码" style="cursor: pointer;">

② 创建验证码测试页面(validatetest.aspx)

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>验证码测试</title>
</head>
<body>
  <form id="form1" runat="server">
  <div>
    <input runat="server" id="txtvalidate" />
    <img src="/validatecode.aspx?validatecodetype=1&0.011150883024061309" onclick="this.src='/validatecode.aspx?validatecodetype=1&'+math.random();" id="imgvalidatecode" alt="点击刷新验证码" title="点击刷新验证码" style="cursor: pointer;">
    <asp:button runat="server" id="btnval" text="提交" onclick="btnval_click" />
  </div>
  </form>
</body>
</html>

③ 编写验证码测试的提交代码(validatetest.aspx.cs)

protected void btnval_click(object sender, eventargs e)
{
  bool result = false;  //验证结果
  string usercode = this.txtvalidate.value; //获取用户输入的验证码
  if (string.isnullorempty(usercode))
  {
    //请输入验证码
    return;
  }
  string validcode = this.session["checkcode"] as string; //获取系统生成的验证码
  if (!string.isnullorempty(validcode))
  {
    if (usercode.tolower() == validcode.tolower())
    {
      //验证成功
      result = true;
    }
    else
    {
      //验证失败
      result = false;
    }
  }
}

更多关于c#相关内容感兴趣的读者可查看本站专题:《c#图片操作技巧汇总》、《c#常见控件用法教程》、《winform控件用法总结》、《c#数据结构与算法教程》、《c#面向对象程序设计入门教程》及《c#程序设计之线程使用技巧总结

希望本文所述对大家c#程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网