PHP 単純な検証コードの種類: 文字 + 数字、ランダムなフォントの歪み
PHP シンプルな認証コードの種類: 文字 + 数字、フォントがランダムに歪んでいる
今は色々な認証コードがありますが、認証コードはユーザーが読むものなので、シンプルな方が良いと個人的には思っています。干渉コード、傾斜、複雑な背景はすべてユーザーにとって一種の拷問です。
より優れたエクスペリエンスを備えた大規模な Web サイトをいくつか見たことがありますが、検証コードは比較的シンプルで、複雑な背景や干渉コード、背景はありません。
文章が良くない点があれば、批判やアドバイスをいただければ幸いです。
<?php if (!defined('IS_INITPHP')) exit('Access Denied!'); /********************************************************************************* * InitPHP 2.0 国产PHP开发框架 扩展类库-验证码 *------------------------------------------- * 版权所有: CopyRight By initphp.com * 您可以自由使用该源码,但是在使用过程中,请保留作者信息。尊重他人劳动成果就是尊重自己 *------------------------------------------- * $Author:liuxinming * $Dtime:2012-10-09 ***********************************************************************************/ class seccodeInit{ private $width; private $height; private $type=0;// 0 字母+数字验证码 private $time=3000;//验证码过期时间(s) private $color=null;//验证码字体颜色 private $im; private $length=4;//验证码长度 private $warping;//随机扭曲 /** * 获取随机数值 * @return string */ private function get_random_val() { $i=0; while($i<$this->length) { mt_srand((double)microtime()*1000000); $randnum=mt_rand(50,90); if(!in_array($randnum,array(58,59,60,61,62,63,64,73,79))) { $authnum=$authnum.chr($randnum); $i++; } } session_start(); $time=time(); $checkcode=md5(md5($authnum.'initphpYzmsy'.$time)); $key=$time.','.$checkcode.','.authnum; $_SESSION['initphp_code'] = $key; return $authnum; } /** * 获取验证码图片 * @param $width 宽 * @param $height 高 * @param $warping 字体随机扭曲开关 0=关,1=开 * @return string */ public function getcode($width=140,$height=40,$warping=0){ $this->width=$width; $this->height=$height; $this->warping=$warping; if($this->type<2&& function_exists('imagecreate') && function_exists('imagecolorset') && function_exists('imagecopyresized') && function_exists('imagecolorallocate') && function_exists('imagechar') && function_exists('imagecolorsforindex') && function_exists('imageline') && function_exists('imagecreatefromstring') && (function_exists('imagegif') || function_exists('imagepng') || function_exists('imagejpeg'))){ $this->image(); } } /** * 生成图片验证码 * @return string */ public function image(){ $this->im=imagecreate($this->width, $this->height);//设置图片背景大小 imagecolorallocate($this->im, 243, 251, 254);// 设置背景 $this->color=imagecolorallocate($this->im, mt_rand(1,120), mt_rand(1,120), mt_rand(1,120));// 验证码字体随机颜色 $ttfPath = dirname(__FILE__) . '/font/';//字体目录 $dirs = opendir($ttfPath); $seccodettf = array(); while($entry = readdir($dirs)) { if($entry != '.' && $entry != '..' && in_array(strtolower(addslashes(strtolower(substr(strrchr($entry, '.'), 1, 10)))), array('ttf', 'ttc'))) { $seccodettf[] = $ttfPath.$entry; } } $ttf = $seccodettf[array_rand($seccodettf)];//随机一种字体 $size = $this->type ? $this->width / 7 : $this->width / 6;//字体大小 imagettftext($this->im,$size, 0, 10, $size*1.2, $this->color, $ttf, $this->get_random_val());//设置验证码字符 if($this->warping){//随机扭曲 $this->setWarping(); } if(function_exists("imagepng")) { header ("Content-type: image/png"); $code=imagepng($this->im); }elseif (function_exists("imagejpeg")) { header ("Content-type: image/jpeg"); $code=imagejpeg($this->im); }elseif (function_exists("imagegif")) { header("Content-type: image/gif"); $code=imagegif($this->im); } imagedestroy($this->im); return $code; } /** * 检查验证码 * @param $code * @return bool */ public function checkCode($code) { session_start(); $secode=explode(',', $_SESSION['initphp_code']); $time=time(); //检查时间是否过期 if($secode[0]>$time||$time-$secode[0]>$this->time) { return false; } //验证码密钥 双md5 后是否一致 if($secode[1]<>md5(md5($code.'initphpYzmsy'.$secode[0]))){ return false; } //检查验证码字符串是否一致 if($code||$code<>$secode[2]) { return false; } return true; } /*随机扭曲*/ public function setWarping(){ $rgb=array(); $direct=rand(0,1); $width = imagesx($this->im); $height = imagesy($this->im); $level=$width /20; for($j = 0;$j < $height;$j++) { for($i = 0;$i < $width;$i++) { $rgb[$i] = imagecolorat($this->im, $i , $j); } for($i = 0;$i < $width;$i++) { $r = sin($j / $height * 2 * M_PI - M_PI * 0.5) * ($direct ? $level : -$level); imagesetpixel($this->im, $i + $r , $j , $rgb[$i]); } } } } ?>
効果:

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









多くのユーザーはスマートウォッチを選ぶときにファーウェイブランドを選択しますが、その中でもファーウェイ GT3pro と GT4 は非常に人気のある選択肢であり、多くのユーザーはファーウェイ GT3pro と GT4 の違いに興味を持っています。 Huawei GT3pro と GT4 の違いは何ですか? 1. 外観 GT4: 46mm と 41mm、材質はガラスミラー + ステンレススチールボディ + 高解像度ファイバーバックシェルです。 GT3pro: 46.6mm および 42.9mm、材質はサファイアガラス + チタンボディ/セラミックボディ + セラミックバックシェルです。 2. 健全な GT4: 最新の Huawei Truseen5.5+ アルゴリズムを使用すると、結果はより正確になります。 GT3pro: ECG 心電図と血管と安全性を追加

ファンクションとは、関数を意味します。これは、特定の関数を備えた再利用可能なコード ブロックです。プログラムの基本コンポーネントの 1 つです。入力パラメータを受け取り、特定の操作を実行し、結果を返すことができます。その目的は、再利用可能なコード ブロックをカプセル化することです。コードの再利用性と保守性を向上させるコード。

Windows 11 で Snipping Tool が機能しない理由 問題の根本原因を理解すると、適切な解決策を見つけるのに役立ちます。 Snipping Tool が正しく動作しない主な理由は次のとおりです。 フォーカス アシスタントがオンになっている: これにより、Snipping Tool が開かなくなります。破損したアプリケーション: 起動時にスニッピング ツールがクラッシュする場合は、破損している可能性があります。古いグラフィック ドライバー: 互換性のないドライバーは、スニッピング ツールに干渉する可能性があります。他のアプリケーションからの干渉: 実行中の他のアプリケーションが Snipping Tool と競合する可能性があります。証明書の有効期限が切れています: アップグレード プロセス中のエラーにより、この問題が発生する可能性があります。これらの簡単な解決策は、ほとんどのユーザーに適しており、特別な技術知識は必要ありません。 1. Windows および Microsoft Store アプリを更新する

パート 1: 最初のトラブルシューティング手順 Apple のシステムステータスを確認する: 複雑な解決策を掘り下げる前に、基本から始めましょう。問題はデバイスにあるのではなく、Apple のサーバーがダウンしている可能性があります。 Apple のシステム ステータス ページにアクセスして、AppStore が適切に動作しているかどうかを確認してください。問題があれば、Apple が修正してくれるのを待つしかありません。インターネット接続を確認します。「AppStore に接続できません」問題は接続不良が原因である場合があるため、安定したインターネット接続があることを確認してください。 Wi-Fi とモバイル データを切り替えるか、ネットワーク設定をリセットしてみてください ([一般] > [リセット] > [ネットワーク設定のリセット] > [設定])。 iOS バージョンを更新します。

AMPコインとは何ですか? AMP トークンは、Synereo プラットフォームの主要取引通貨として 2015 年に Synereo チームによって作成されました。 AMP トークンは、複数の機能と用途を通じてユーザーに優れたデジタル経済体験を提供することを目的としています。 AMP トークンの目的 AMP トークンには、Synereo プラットフォームで複数の役割と機能があります。まず、プラットフォームの暗号通貨報酬システムの一部として、ユーザーはコンテンツを共有および宣伝することで AMP 報酬を獲得できます。これは、ユーザーがプラットフォームのアクティビティにより積極的に参加することを促すメカニズムです。 AMP トークンは、Synereo プラットフォームでコンテンツを宣伝および配布するために使用することもできます。ユーザーは、AMP トークンを使用して、より多くの視聴者に視聴して共有してもらうことで、プラットフォーム上でのコンテンツの可視性を高めることができます。

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

この記事では、Python の enumerate() 関数と「enumerate()」関数の目的について学びます。 enumerate() 関数とは何ですか? Python の enumerate() 関数は、データ コレクションをパラメータとして受け取り、列挙オブジェクトを返します。列挙オブジェクトはキーと値のペアとして返されます。キーは各項目に対応するインデックス、値は項目です。構文 enumerate(iterable,start) パラメータ iterable - 渡されたデータ コレクションは、iterablestart と呼ばれる列挙オブジェクトとして返すことができます。 - 名前が示すように、列挙オブジェクトの開始インデックスは start によって定義されます。無視したら

MySQL.proc テーブルの役割と機能の詳細な説明。MySQL は人気のあるリレーショナル データベース管理システムです。開発者が MySQL を使用する場合、多くの場合、ストアド プロシージャ (StoredProcedure) の作成と管理が必要になります。 MySQL.proc テーブルは非常に重要なシステム テーブルであり、ストアド プロシージャの名前、定義、パラメータなど、データベース内のすべてのストアド プロシージャに関連する情報が保存されます。この記事では、MySQL.proc テーブルの役割と機能について詳しく説明します。
