検索
ホームページバックエンド開発C#.Net チュートリアルasp.net クリック確認コード実装のアイデア

はは、久しぶりに投稿しましたが、確認コードをクリックすると面白いことが分かったので、自分でも書いてみたいと思いました。

最初のエフェクト画像

asp.net クリック確認コード実装のアイデア

このエフェクトに惹かれた場合は、読み続けてください。

コードを投稿する前に、いくつかのアイデアを教えてください:

1. 漢字ライブラリがあり、それをグリフに従って分類する必要があります。 (データベースで部首を分類しました)

2. 認証コードを取得します (つまり、いくつかの文字を認証コードとして取得します)

3. 抽出された文字に基づいて類似する単語を検索します

4.確認コードのテキストと類似の文字

5. 絵を描く

6. 表示

1. フォント ライブラリを入手

私たちの国の文化は広範囲で奥が深いですが、これほど多くのスパイシーな文字はどこから来たのでしょうか?もちろん手動で追加することはできなかったので、インターネットで漢字を検索できる Web サイトをランダムに見つけて、他の人のデータをキャプチャしました。データをキャプチャするには、ポータルをクリックしてください。ポータルに記載されている内容は単なるアイデアです。わからないことがあれば、お知らせください。私のフォントライブラリを以下に共有します。

2. 認証コードを取得します

これは比較的簡単です。ここにコードを直接貼り付けます。以下のコードは、図の便宜上、4 つのデータをランダムに並べ替えるコードです。 。個人的には、以下の書き方よりも、まずランダムにIDを生成し、そのIDを元に直接データを取得する方がクエリが高速になるのではないかと思います。 (使用するデータベースは MySql であることに注意してください)

/// <summary>
/// 获取验证码
/// </summary>
public List<VerificationCode.Model.WenZhi> GetCodeText()
{
 const string sql = "SELECT * FROM wenzhi ORDER BY RAND() LIMIT 4";
 var dataReader = dbHelper.GetDataReader(sql);
 var list = DataReaderToList(dataReader);
 dataReader.Close();
 return list;
}

3. 抽出されたテキストに基づいて類似の単語を検索します

最初のステップで部首を保存したため、ここでは部首の形状に基づいて現在の部首を直接取得します。最初のものは単語に似ています。

/// <summary>
/// 获取答案备选
/// </summary>
/// <param name="buShouCode">部首编码</param>
/// <param name="id">当前文字ID</param>
/// <param name="number">数量</param>
/// <returns></returns>
public List<VerificationCode.Model.WenZhi> GetAnswer(string buShouCode, int id,int number=1)
{
 string sql = $"SELECT * FROM wenzhi where BuShouCode=&#39;{buShouCode}&#39; and ID <> {id} ORDER BY RAND() LIMIT "+ number;
 var dataReader = dbHelper.GetDataReader(sql);
 var list = DataReaderToList(dataReader);
 dataReader.Close();
 return list;
}

4. 検証コードのテキストと類似の単語を配置します

次のコードは、まず代替回答と検証コードをセットに入れてから、セットを並べ替えます

public Model.Code GetCode()
 {
   
  var wenzlist = _wenZhiDal.GetCodeText(); //获取验证码
  var listAnsuwr = new List<Answer>();//实例化备选答案对象
  var answerCode = string.Empty;//答案
  var result = new Model.Code
  {
   Id = Guid.NewGuid().ToString()
  };
  //根据验证码获取备选答案并把添加到答案添加到备选答案集合
  foreach (var item in wenzlist)
  {
   answerCode += item.ID + ",";
   result.AnswerValue += item.Text;
   var answerList = _wenZhiDal.GetAnswer(item.BuShouCode, item.ID);
   listAnsuwr.Add(new Answer { Id = item.ID.ToString(), Img = GetImage(item.Text) });
   listAnsuwr.AddRange(answerList.Select(answer => new Answer { Id = answer.ID.ToString(), Img = GetImage(answer.Text) }));
  }
  //如果答案个数不够就再去取几个
  if (listAnsuwr.Count < 9)
  {
   var ran = new Random();
   var randKey = ran.Next(0, 4);
   var item = wenzlist[randKey];
   var answerList = _wenZhiDal.GetAnswer(item.BuShouCode, item.ID, 9 - listAnsuwr.Count);
   listAnsuwr.AddRange(answerList.Select(answer => new Answer { Id = answer.ID.ToString(), Img = GetImage(answer.Text) }));
  }
  result.CodeImg = GetImage(result.AnswerValue);//获取图片
  result.AnswerValue = answerCode.TrimEnd(&#39;,&#39;);
  result.Answer = RandomSortList(listAnsuwr);//打乱正确答案与形近字的顺序
  return result;
 }

これは、セットを並べ替えるコードです

​​
/// <summary>
/// 随机排列集合
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="listT"></param>
/// <returns></returns>
private static List<T> RandomSortList<T>(IEnumerable<T> listT)
{
 var random = new Random();
 var newList = new List<T>();
 foreach (var item in listT)
 {
  newList.Insert(random.Next(newList.Count + 1), item);
 }
 return newList;
}

5 . 絵を描く

以下は、絵を描くためのコードであり、2 つの異なる描画方法に対応しています (内部のコメントは非常に明確です)。テキストが x° 回転された後は人間には違いが分からないので心配しないでください (笑)。コードの最後の文では、フロントエンド呼び出しを容易にするために画像を Base64 に変換しました。

private static string GetImage(string text)
  {
   Image image;
   switch (text.Length)
   {
    case 1:
     image = new Bitmap(50, 40);
     break;
    case 4:
     image = new Bitmap(120, 40);
     break;
    default:
     image = new Bitmap(50, 40);
     break;
   }
   Brush brushText = new SolidBrush(Color.FromArgb(255, 0, 0, 0));
   var graphics = Graphics.FromImage(image);
   graphics.SmoothingMode = SmoothingMode.AntiAlias;
   graphics.Clear(Color.White);
   var font = new Font(new FontFamily("华文彩云"), 20, FontStyle.Regular);
   if (text.Length > 1)//画验证码
   {
    //先来两条直线做干扰 然后再画文字
    graphics.DrawLine(new Pen(brushText, new Random().Next(1, 3)), new Point(new Random().Next(0, 10), new Random().Next(10, 40)), new Point(new Random().Next(100, 120), new Random().Next(10, 30)));
    graphics.DrawLine(new Pen(brushText, new Random().Next(1, 3)), new Point(new Random().Next(20, 50), new Random().Next(0, 10)), new Point(new Random().Next(100, 120), new Random().Next(30, 40)));
    graphics.DrawString(text, font, brushText, 0, 10);
 
   }
   else//画备选答案
   {
    Point middle = new Point(25, 20);
    graphics.TranslateTransform(middle.X, middle.Y);
    //这里是360°随机旋转 
    graphics.RotateTransform(new Random().Next(0, 360));
    var format = new StringFormat(StringFormatFlags.NoClip)
    {
     Alignment = StringAlignment.Center,
     LineAlignment = StringAlignment.Center
    };
    graphics.DrawString(text, font, brushText, 0, 0, format);
 
   }
   brushText.Dispose();
   graphics.Dispose();
   return ImageToBase64(image);
  }

6. 表示

GetCodeメソッドを直接呼び出して認証コードオブジェクトを返します

以下は背景コードですAnswerValueに正解が入っているはずなので、まずそれを取り出して入れます。 Session に値を入れてクリアしたら、json 経由でブラウザに返します。

public string GetVerCode()
{
 var code = new VerificationCode.Code().GetCode();
 Session["VERCODE"] = code.AnswerValue;
 code.AnswerValue = "";
 return JsonConvert.SerializeObject(code);
}

次に、いくつかの HTML コード

<div class="form-group">
     <ul class="vercode">
      <li><img  src=&#39;&#39;/ alt="asp.net クリック確認コード実装のアイデア" ></li>
      <li><img  src=&#39;&#39;/ alt="asp.net クリック確認コード実装のアイデア" ></li>
      <li><img  src=&#39;&#39;/ alt="asp.net クリック確認コード実装のアイデア" ></li>
      <li><img  src=&#39;&#39;/ alt="asp.net クリック確認コード実装のアイデア" ></li>
      <li class="delete" onclick="delete_input()"></li>
     </ul>
     <div>
      <img  id="code-image"/ alt="asp.net クリック確認コード実装のアイデア" > <a href="javascript:void(0);" onclick="load_vercode()">看不清?</a>
     </div>
     <ul class="vercode-anwser">
      <li><img  / alt="asp.net クリック確認コード実装のアイデア" ></li>
      <li><img  / alt="asp.net クリック確認コード実装のアイデア" ></li>
      <li><img  / alt="asp.net クリック確認コード実装のアイデア" ></li>
      <li><img  / alt="asp.net クリック確認コード実装のアイデア" ></li>
      <li><img  / alt="asp.net クリック確認コード実装のアイデア" ></li>
      <li><img  / alt="asp.net クリック確認コード実装のアイデア" ></li>
      <li><img  / alt="asp.net クリック確認コード実装のアイデア" ></li>
      <li><img  / alt="asp.net クリック確認コード実装のアイデア" ></li>
      <li><img  / alt="asp.net クリック確認コード実装のアイデア" ></li>
     </ul>
    </div>

といくつかの JS コードを積み上げてみましょう。ここでは画像にエフェクトを実装するだけで、データはまだ検証していません (検証のアイデアは次のとおりです。各画像は ID に対応しています)。 、選択した画像が取得されます。ID をカンマで区切って、セッション内の値と比較します。

<script>
  $(function () {
   //加载验证码
   load_vercode();
   //绑定验证码点击事件
   $(".vercode-anwser").find("img").on("click", null, function () {
    $(".vercode").find("img[src=&#39;&#39;]:eq(0)").attr("src", $(this).attr("src"));
   });
  });
 
  function load_vercode() {
   $(".vercode").find("img").attr("src", "");
   $.get("GetVerCode", function (data) {
    var result = JSON.parse(data);
    $("#code-image").attr("src", "data:image/png;base64," + result.CodeImg);
    $(".vercode-anwser").find("img").each(function (index) {
     $(this).attr("src", "data:image/png;base64," + result.Answer[index].Img);
    });
   });
  }
  //删除事件
  function delete_input() {
   $(".vercode").find("img[src!=&#39;&#39;]:last").attr("src", "");
  }
 </script>

上記のアイデアは、単なる個人的な考えです。興味のある方は、議論してください。それを一緒に。

以上がこの記事の全内容です。皆さんの学習に役立つことを願っています。また、皆さんも PHP 中国語 Web サイトをサポートしていただければ幸いです。

asp.net クリック確認コードの実装アイデアに関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
マスターC#.NETデザインパターン:シングルトンから依存関係への注入までマスターC#.NETデザインパターン:シングルトンから依存関係への注入までMay 09, 2025 am 12:15 AM

C#.NETの設計パターンには、Singletonパターンと依存関係の注入が含まれます。 1.シングルトンモードは、クラスに1つのインスタンスしかないことを保証します。これは、グローバルアクセスポイントが必要なシナリオに適していますが、安全性と虐待の問題をスレッドすることに注意する必要があります。 2。依存関係の噴射により、依存関係を注入することにより、コードの柔軟性とテスト可能性が向上します。多くの場合、コンストラクターの注入に使用されますが、複雑さを高めるために過度の使用を避ける必要があります。

C#.NET現代世界:アプリケーションと産業C#.NET現代世界:アプリケーションと産業May 08, 2025 am 12:08 AM

C#.NETは、ゲーム開発、金融サービス、モノのインターネット、クラウドコンピューティングの分野で現代世界で広く使用されています。 1)ゲーム開発では、C#を使用してUnityエンジンを介してプログラムします。 2)金融サービスの分野では、C#.NETが高性能取引システムとデータ分析ツールの開発に使用されます。 3)IoTおよびクラウドコンピューティングに関して、C#.NETはAzure Servicesを通じてサポートを提供して、デバイス制御ロジックとデータ処理を開発します。

C#.NETフレームワークvs.Net Core/5/6:違いは何ですか?C#.NETフレームワークvs.Net Core/5/6:違いは何ですか?May 07, 2025 am 12:06 AM

.NETFRAMEWORKISWINDOWS-CENTRIC、while.netcore/5/6supportscross-platformdevelopment.1).netframework、2002年以来、isidealforwindowsprimitedincross-platformcapabilities.2).netcore、andtseverutions(andtseverutions(andtseverution)

C#.NET開発者のコ​​ミュニティ:リソースとサポートC#.NET開発者のコ​​ミュニティ:リソースとサポートMay 06, 2025 am 12:11 AM

C#.NET開発者コミュニティは、次のような豊富なリソースとサポートを提供します。1。Microsoftの公式文書、2。StackoverflowやRedditなどのコミュニティフォーラム、3。Githubのオープンソースプロジェクト。これらのリソースは、開発者が基本的な学習から高度なアプリケーションまでプログラミングスキルを向上させるのに役立ちます。

C#.NETアドバンテージ:機能、利点、およびユースケースC#.NETアドバンテージ:機能、利点、およびユースケースMay 05, 2025 am 12:01 AM

C#.NETの利点には以下が含まれます。1)非同期プログラミングなどの言語機能により、開発が簡素化されます。 2)パフォーマンスと信頼性、JITコンピレーションとゴミ収集メカニズムによる効率の向上。 3)クロスプラットフォームサポート、.NetCoreはアプリケーションシナリオを拡張します。 4)Webからデスクトップ、ゲーム開発までの優れたパフォーマンスを備えた幅広い実用的なアプリケーション。

C#は常に.NETに関連付けられていますか?代替案の探求C#は常に.NETに関連付けられていますか?代替案の探求May 04, 2025 am 12:06 AM

C#は常に.NETに結び付けられているわけではありません。 1)C#は、モノランタイム環境で実行でき、LinuxおよびMacOSに適しています。 2)Unityゲームエンジンでは、C#はスクリプトに使用され、.NETフレームワークに依存しません。 3)C#は、.NetMicRoframeworkなどの埋め込みシステム開発にも使用できます。

.NETエコシステム:C#の役割以降.NETエコシステム:C#の役割以降May 03, 2025 am 12:04 AM

C#は、.NETエコシステムで中核的な役割を果たし、開発者にとって好ましい言語です。 1)C#は、C、C、Javaの利点を組み合わせた効率的で使いやすいプログラミング方法を提供します。 2).NETランタイム(CLR)を介して実行して、効率的なクロスプラットフォーム操作を確保します。 3)C#は、LINQや非同期プログラミングなどの基本的な使用から高度な使用をサポートします。 4)最適化とベストプラクティスには、StringBuilderおよび非同期プログラミングを使用して、パフォーマンスと保守性を向上させることが含まれます。

.NET言語としてのC#:エコシステムの基礎.NET言語としてのC#:エコシステムの基礎May 02, 2025 am 12:01 AM

C#は、2000年にMicrosoftがリリースしたプログラミング言語で、CのパワーとJavaのシンプルさを組み合わせることを目指しています。 1.C#は、カプセル化、継承、多型をサポートするタイプセーフ、オブジェクト指向のプログラミング言語です。 2. C#のコンパイルプロセスは、コードを中間言語(IL)に変換し、.NETランタイム環境(CLR)でマシンコード実行にコンパイルします。 3. C#の基本的な使用法には、可変宣言、制御フロー、関数の定義が含まれ、高度な使用法には非同期プログラミング、LINQ、およびデリゲートなどが含まれます。4。一般的なエラーには、デバッガー、例外処理、ロギングを介してデバッグできるタイプミスマッチおよびヌル参照の例外が含まれます。 5.パフォーマンスの最適化の提案には、LINQの使用、非同期プログラミング、およびコードの読み取り可能性の向上が含まれます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、