Heim  >  Artikel  >  Backend-Entwicklung  >  C#-Verifizierungscode-Erstellung und -Nutzung, Beispielcode-Freigabe

C#-Verifizierungscode-Erstellung und -Nutzung, Beispielcode-Freigabe

黄舟
黄舟Original
2017-03-24 11:42:301267Durchsuche

In diesem Artikel wird hauptsächlich C#Bestätigungscode Die Erstellung und Verwendungsmethoden von werden in Form von Beispielen detailliert analysiert, um den C#-Verifizierungscode und verwandte Techniken zu erstellen und zu überprüfen. Freunde in Not können auf

Die Beispiele in diesem Artikel beschreiben den C#-Verifizierungscode . Die Erstellungs- und Verwendungsmethoden werden zu Ihrer Information mit allen geteilt:

1. Erstellen Sie einen Bestätigungscode in C#

① Erstellen Sie eine Bestätigungscodeseite (ValidateCode.aspx).

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>获取验证码</title>
</head>
<body>
  <form id="form1" runat="server">
    <p>获取验证码</p>
  </form>
</body>
</html>

② Schreiben Sie den Code, um den Bestätigungscode zu erhalten (ValidateCode.aspx.cs)

/// <summary>
/// 验证码类型(0-字母数字混合,1-数字,2-字母)
/// </summary>
private string validateCodeType = "0";
/// <summary>
/// 验证码字符个数
/// </summary>
private int validateCodeCount = 4;
/// <summary>
/// 验证码的字符集,去掉了一些容易混淆的字符
/// </summary>
char[] character = { &#39;2&#39;, &#39;3&#39;, &#39;4&#39;, &#39;5&#39;, &#39;6&#39;, &#39;8&#39;, &#39;9&#39;, &#39;A&#39;, &#39;B&#39;, &#39;C&#39;, &#39;D&#39;, &#39;E&#39;, &#39;F&#39;, &#39;G&#39;, &#39;H&#39;, &#39;J&#39;, &#39;K&#39;, &#39;L&#39;, &#39;M&#39;, &#39;N&#39;, &#39;P&#39;, &#39;R&#39;,
 &#39;S&#39;, &#39;T&#39;, &#39;W&#39;, &#39;X&#39;, &#39;Y&#39; };
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. Verwendung des Bestätigungscodes

① Code anzeigen der vordere Abschnitt des Bestätigungscodes

Der Code lautet wie folgt:

<img src="/ValidateCode.aspx?ValidateCodeType=1&0.011150883024061309" 
onclick
="this.src=&#39;/ValidateCode.aspx?ValidateCodeType=1&&#39;+Math.random();" id="imgValidateCode" alt="点击刷新验证码" title="点击刷新验证码" style="cursor: pointer;">

② Erstellen Sie die Bestätigungscode-Testseite (ValidateTest.aspx)

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>验证码测试</title>
</head>
<body>
  <form id="form1" runat="server">
  <p>
    <input runat="server" id="txtValidate" />
    <img src="/ValidateCode.aspx?ValidateCodeType=1&0.011150883024061309" 
    onclick="this.src=&#39;/ValidateCode.aspx?ValidateCodeType=1&&#39;+Math.random();" 
    id="imgValidateCode" alt="点击刷新验证码" title="点击刷新验证码" style="cursor: pointer;">
    <asp:Button runat="server" id="btnVal" Text="提交" onclick="btnVal_Click" />
  </p>
  </form>
</body>
</html>

③ Schreiben Sie den Übermittlungscode für den Bestätigungscodetest (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;
    }
  }
}

Das obige ist der detaillierte Inhalt vonC#-Verifizierungscode-Erstellung und -Nutzung, Beispielcode-Freigabe. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn