JavaScript を使用してページに動的な検証コードを実装する例

JavaScript を使用してページに動的な検証コードを実装する例

導入:

現在、プログラム攻撃を防ぐために、ユーザーがログインまたは登録するときに多くの動的検証テクノロジが追加されています。通常、これはランダムに生成された検証コードの入力をユーザーに求めることで実現されます。私はバックエンドとやり取りせず、フロントエンドで検証して、誰もが見られるように送信するものを自分で書きました。

効果画像:

実装のアイデア:

  • 数字と文字を配列に入れて、配列のインデックスをランダムに取得し、合計 4 つを取得して検証コードを形成します。
  • 検証コードを(1つずつ)レンダリングします。
  • ランダムな色で一定数の干渉線を描きます。
  • 認証コードを入力します。4桁の数字を入力して認証に進むと、正しい場合はチェックマークが表示され、間違っている場合は×が表示され、認証コードが更新されます。

コンストラクタの記述

テキストコンストラクタ

//テキストコンストラクタ関数 Text(o){
		this.x=0,​​//x座標 this.y=0,//y座標 this.text='',//コンテンツ this.font=null;//フォント this.textAlign=null;//配置		
		これをinit(o);
	}
	
	Text.prototype.init=function(o){
		for(var key in o){
			this[キー]=o[キー];
		}
	}
	Text.prototype.render=function(context){
		this.ctx=コンテキスト;
		innerRender(これを);
			
		関数innerRender(obj){
			var ctx = obj.ctx;
			ctx.save()
			ctx.beginPath();
			ctx.translate(obj.x,obj.y);
			
			フォントサイズは、
				ctx.font=obj.font;
			}
			(obj.textAlign)の場合{
				ctx.textAlign=obj.textAlign;
			}
			if(obj.fill){//塗りつぶされていますか? obj.fillStyle?(ctx.fillStyle=obj.fillStyle):null;
				ctx.fillText(obj.text,0,0);
			}
		 	ctx.restore();
		}
	 	これを返します。
	}

線分コンストラクタ

 
	//直線構築関数 Line(ctx,o){
		this.x=0,​​//x座標 this.y=0,//y座標 this.startX=0,//開始点のx位置 this.startY=0, //開始点のy位置 this.endX=0,//終点のx位置 this.endY=0;//終点のy位置 this.thin=false;//間引き係数を設定 this.ctx=ctx;
		
		これをinit(o);
	}
	Line.prototype.init=function(o){
		for(var key in o){
			this[キー]=o[キー];
		}
	}
	Line.prototype.render = 関数() {
		innerRender(これを);
		
		関数innerRender(obj){
			var ctx = obj.ctx;
			ctx.save()
			ctx.beginPath();
			ctx.translate(obj.x,obj.y);
			if(obj.thin){
				ctx.translate(0.5,0.5);
			}
			if(obj.lineWidth){//線の幅を設定する ctx.lineWidth=obj.lineWidth;
			}
			(obj.strokeStyle)の場合{
				ctx.strokeStyle=obj.strokeStyle;
			}
			//線を描く ctx.moveTo(obj.startX, obj.startY);
		 	ctx.lineTo(obj.endX, obj.endY);
		 	ctx.stroke();
		 	ctx.restore();
		}
	 	
	 	これを返します。
	}

長さで認証コードを取得する

	//指定された長さに従ってランダムな英数字を生成します Verifiable.prototype.randomWord=function(range){
	 var str = "",位置,
	   arr = ['0'、 '1'、 '2'、 '3'、 '5'、 '6'、 '7'、 '9'、 'a'、 'b' '、' e '、' f '、' g '' '' '' '' u '、' v '、' w '、' x '、' y '、' '、' '、' b '、' d '、' e '、' f '、' g '' '' '' '' '' '' '' z '];
	 for(var i=0; i<range; i++){
	  pos = Math.round(Math.random() * (arr.length-1));
	  str += arr[位置];
	 }
	 str を返します。
	}

テキストを描く

	//テキストを描画する Verifiable.prototype.drawText=function(){
		var _this_ は、次のようになります。
		var count = 4; //文字数 var textW = 40; //テキストの幅 var code=this.code = this.randomWord(count);
		var codeArr = code.split("");
		var テキスト、x ;
		codeArr.forEach(関数(c,i){
			x = that.w/count*i+textW/2;
			//テキストを描画 text = new Text({
				x:x、
				y:テキストW-10,
				テキスト:c,
				フォント:'30px ans-serif',
				テキスト配置:'center',
				塗りつぶし:true、
				塗りつぶしスタイル:'#412D6A'
			});
			that.renderArr.push(テキスト);
		})		
	}

現時点での効果:

干渉線を描く

//干渉線を描く Verifiable.prototype.interfering=function(){
		var count = this.lineCount=20、line、ctx=this.ctx;
		var startX,
			開始Y、
			終了X、
			終了Y、
			色;
			
		for(var i=0;i<count;i++){
			//ランダムな開始座標、終了座標、色 startX = _.getRandom(0,140);
			開始Y = _.getRandom(0,40);
			endX = _.getRandom(0,140);
			終了Y = _.getRandom(0,40);
			色 = _.getRandomColor();
			//直線を定義する line = new Line(ctx,{
				x:0,
				y:0,
			 	開始X:開始X、
			 	開始Y:開始Y、
			 	終了X:終了X、
			 	終了Y:終了Y、
			 	ストロークスタイル:色
			})
			
			this.renderArr.push(行);
		}
	}

効果は以下のとおりです。

ページレイアウトを追加

<!DOCTYPE html>
<html lang="ja">
 
<ヘッド>
  <メタ文字セット="UTF-8">
  <title>検証可能</title>
  <スタイル>
   #箱{
		幅:140ピクセル;
		高さ:40px;
		位置:絶対;
		
	}
	#入力Div{
		幅:220px;
		位置:絶対;
		マージン:0 自動;
		左:0;
		上:30px;
		右:0;
		下:0;
	}
	#容器{
		幅:220px;
		高さ:60px;
		位置:絶対;
		マージン:0 自動;
		左:0;
		上:60px;
		右:0;
		下:0;
	}
	.リフレッシュ{
		位置:絶対;
		左:140px;
	}
  </スタイル>
</head>
 
<本文>
	<div id='inputDiv'>
  	確認コード: <input size=10 id='codeInput'><img id='stateImg' style="vertical-align: middle;width:20px"></img>
  </div>
  <div id="コンテナ">
  	<div id='ボックス'></div>
  	<a href="javascript:void 0" class="refresh" onclick="refresh()">1 つ変更</a>
  </div>
</本文>
	<script type="text/javascript" src='verifiable.js'></script>
  <script type="text/javascript">
 	var box = document.getElementById('box');
 	var stateImg = document.getElementById('stateImg');
 	var codeInput = document.getElementById('codeInput');
 	
	検証可能.init(ボックス、コード入力、状態画像);
	
	//画像を変更する function refresh(){
		検証可能.renderArr.length=0;
		検証可能な描画();
	}
  </スクリプト>
</html>

入力ボックスイベントを追加

	//入力ボックスイベント Verifiable.prototype.inputValid=function(input){
		var val = 入力値;
		val.length<4の場合、戻り値は;
		
		if(this.code==val){
			コンソールにログ出力します。
			this.result(0);
		}それ以外{
			this.result(1);
		}
	}

成功と失敗の検証を追加する

// 結果の処理 Verifiable.prototype.result=function(result){
		var codeInput = this.codeInput;
		var stateImg = this.stateImg;
		if(result==0){//成功 stateImg.src="./images/suc.jpeg";
			codeInput.readOnly=true;
		}else{//失敗 codeInput.readOnly=false;
			stateImg.src="./images/fail.jpeg";
			this.renderArr.length=0;
			これを描画します。
		}
	}

仕上げる

コードのダウンロード

これで、ページに動的検証コードを実装するための JavaScript の実装例に関するこの記事は終了です。より関連性の高い JavaScript 動的検証コードの内容については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • ページ検証コードを生成する JSP メソッド [コード付き]
  • jsはシンプルな検証コードを実装します
  • jsはクリックして確認コードを取得するカウントダウン効果を実現します
  • JS検証コード機能を実装する3つの方法
  • JSはグラフィック検証コードの実装コードを作成します
  • js+ca​​nvasはスライディングパズルの検証コードの機能を実現します
  • js+htmlで簡単な検証コードを作成する
  • JS検証コード実装コード
  • 画像スライド検証コードを実装する js プラグイン

<<:  Linux カーネル デバイス ドライバー カーネル時間管理に関する注意事項

>>:  Workbench を介して MySQL データベースにリモートでアクセスする方法の詳細な説明

推薦する

JavaScript の 7 つのデータ型の詳細な説明

目次序文:詳しい紹介:練習する:要約する序文: Python、Java、Cシリーズなど、すべての主要...

Linux 構成 SSH パスワードフリーログイン「ssh-keygen」の基本的な使い方

目次1 SSHとは何か2 SSHパスワードフリーログインを設定する2.1 必要なソフトウェアのインス...

MySQL ストアド プロシージャと共通関数のコード分析

mysql ストアド プロシージャの概念:特定のタスク (クエリと更新) を実行できる、データベース...

MySQL 5.7.18 リリース インストール ガイド (bin ファイル バージョンを含む)

インストール プロセスは、コンパイル手順を除いて、基本的にソース バージョンと同じです。この記事では...

自動同期テーブル構造のMySql開発

開発の問題点開発プロセスでは、データベース フィールドが頻繁に変更されるため、RD 環境と QA 環...

CSS はモバイル互換性の問題を解決するために 0.5px の線を実装します (推奨)

【コンテンツ】: 1.背景画像のグラデーションスタイルを使用する2. スケールを使ってズームできる...

Vue の長いリストをすばやく読み込む方法

目次背景メインコンテンツ1. コンポーネントの比較2. 実装のアイデア3. キーメソッドソースコード...

デザインのヒント: きっと気に入っていただけると思います

<br />このタイトルを見ると、見覚えがあるかもしれません。多くのウェブサイトが同様の...

CSSはラジオをクリックして2つの画像スタイルを切り替えますが、複数のラジオのうち1つだけをチェックできます。

クリックされたボタンには赤い画像スタイルを実装し、選択されていない他のボタンには灰色の画像スタイルを...

vue-router からのフロントエンドルーティングの 2 つの実装

目次モードパラメータハッシュ履歴ハッシュ履歴.push()ハッシュ履歴.replace()アドレスバ...

ルート変更を監視するJavaScriptの詳細な説明

目次歴史pushState() メソッドpushState() の使用シナリオreplaceStat...

VMware15 の CentOS7 インストールの詳細なプロセスとよくある問題 (画像とテキスト)

1. インストールパッケージの準備VMware-player-15.0.4-12990004、非商...

Docker ベースの MySQL マスタースレーブレプリケーション環境を構築するための実装手順

1. はじめに以前のプログラム アーキテクチャは次の形式になります。プログラムのサイズが大きくなると...

Linux でのログ サーバーの設定に関するグラフィック チュートリアル

序文この記事では、Linux 構成ログ サーバーに関する関連コンテンツを主に紹介し、参考と学習のため...