Maison développement back-end tutoriel php PHP简略验证码类:字母+数字 字体随机扭曲

PHP简略验证码类:字母+数字 字体随机扭曲

Jun 13, 2016 pm 01:09 PM
amp exists function gt this

PHP简单验证码类:字母+数字 字体随机扭曲

      现在各式各样的验证码,个人认为验证码是让用户看的,所以简单就好。什么干扰码,倾斜,复杂的背景 都是对用户的一种折磨。

      看了一些比较大的体验比较好的网站验证码都较为简单,没有复杂的背景,没有干扰码,没有背景。

      有什么地方写的不好的欢迎大家批评,指点。

<?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->typeimage();
		}
	}
	/**
	 * 生成图片验证码
	 * @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 im, $i , $j);
				}
			for($i = 0;$i im, $i + $r , $j , $rgb[$i]);
				}
		}
	}
}
?>
Copier après la connexion

效果:


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelles sont les différences entre Huawei GT3 Pro et GT4 ? Quelles sont les différences entre Huawei GT3 Pro et GT4 ? Dec 29, 2023 pm 02:27 PM

De nombreux utilisateurs choisiront la marque Huawei lors du choix des montres intelligentes. Parmi eux, les Huawei GT3pro et GT4 sont des choix très populaires. De nombreux utilisateurs sont curieux de connaître la différence entre Huawei GT3pro et GT4. Quelles sont les différences entre Huawei GT3pro et GT4 ? 1. Apparence GT4 : 46 mm et 41 mm, le matériau est un miroir en verre + un corps en acier inoxydable + une coque arrière en fibre haute résolution. GT3pro : 46,6 mm et 42,9 mm, le matériau est du verre saphir + corps en titane/corps en céramique + coque arrière en céramique 2. GT4 sain : en utilisant le dernier algorithme Huawei Truseen5.5+, les résultats seront plus précis. GT3pro : ajout d'un électrocardiogramme ECG, d'un vaisseau sanguin et de la sécurité

Que signifie fonction ? Que signifie fonction ? Aug 04, 2023 am 10:33 AM

Fonction signifie fonction. Il s'agit d'un bloc de code réutilisable avec des fonctions spécifiques. C'est l'un des composants de base d'un programme. Il peut accepter des paramètres d'entrée, effectuer des opérations spécifiques et renvoyer des résultats. code pour améliorer la réutilisabilité et la maintenabilité du code.

Correctif : l'outil de capture ne fonctionne pas sous Windows 11 Correctif : l'outil de capture ne fonctionne pas sous Windows 11 Aug 24, 2023 am 09:48 AM

Pourquoi l'outil Snipping ne fonctionne pas sous Windows 11 Comprendre la cause première du problème peut aider à trouver la bonne solution. Voici les principales raisons pour lesquelles l'outil de capture peut ne pas fonctionner correctement : L'assistant de mise au point est activé : cela empêche l'ouverture de l'outil de capture. Application corrompue : si l'outil de capture plante au lancement, il est peut-être corrompu. Pilotes graphiques obsolètes : des pilotes incompatibles peuvent interférer avec l'outil de capture. Interférence provenant d'autres applications : d'autres applications en cours d'exécution peuvent entrer en conflit avec l'outil de capture. Le certificat a expiré : une erreur lors du processus de mise à niveau peut provoquer ce problème. Solution simple. Celles-ci conviennent à la plupart des utilisateurs et ne nécessitent aucune connaissance technique particulière. 1. Mettez à jour les applications Windows et Microsoft Store

Comment réparer l'erreur Impossible de se connecter à l'App Store sur iPhone Comment réparer l'erreur Impossible de se connecter à l'App Store sur iPhone Jul 29, 2023 am 08:22 AM

Partie 1 : étapes de dépannage initiales Vérification de l'état du système Apple : avant d'aborder des solutions complexes, commençons par les bases. Le problème ne vient peut-être pas de votre appareil ; les serveurs Apple sont peut-être en panne. Visitez la page État du système d'Apple pour voir si l'AppStore fonctionne correctement. S'il y a un problème, tout ce que vous pouvez faire est d'attendre qu'Apple le résolve. Vérifiez votre connexion Internet : assurez-vous que vous disposez d'une connexion Internet stable, car le problème "Impossible de se connecter à l'AppStore" peut parfois être attribué à une mauvaise connexion. Essayez de basculer entre le Wi-Fi et les données mobiles ou de réinitialiser les paramètres réseau (Général > Réinitialiser > Réinitialiser les paramètres réseau > Paramètres). Mettez à jour votre version iOS :

Quelle pièce est l'AMP ? Quelle pièce est l'AMP ? Feb 24, 2024 pm 09:16 PM

Qu’est-ce que la pièce AMP ? Le token AMP a été créé par l'équipe Synereo en 2015 comme principale devise de trading de la plateforme Synereo. Le jeton AMP vise à offrir aux utilisateurs une meilleure expérience économique numérique grâce à de multiples fonctions et utilisations. Objectif du jeton AMP Le jeton AMP a plusieurs rôles et fonctions dans la plateforme Synereo. Premièrement, dans le cadre du système de récompense en crypto-monnaie de la plateforme, les utilisateurs peuvent gagner des récompenses AMP en partageant et en promouvant du contenu, un mécanisme qui encourage les utilisateurs à participer plus activement aux activités de la plateforme. Les jetons AMP peuvent également être utilisés pour promouvoir et distribuer du contenu sur la plateforme Synereo. Les utilisateurs peuvent augmenter la visibilité de leur contenu sur la plateforme en utilisant des jetons AMP pour attirer davantage de téléspectateurs à consulter et à partager.

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

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

Quel est le but de la fonction « enumerate() » en Python ? Quel est le but de la fonction « enumerate() » en Python ? Sep 01, 2023 am 11:29 AM

Dans cet article, nous découvrirons la fonction enumerate() et le but de la fonction « enumerate() » en Python. Qu'est-ce que la fonction enumerate() ? La fonction enumerate() de Python accepte une collection de données comme paramètre et renvoie un objet d'énumération. Les objets d'énumération sont renvoyés sous forme de paires clé-valeur. La clé est l'index correspondant à chaque élément, et la valeur est les éléments. Syntaxe enumerate(iterable,start) Paramètres iterable - Les données transmises dans la collection peuvent être renvoyées sous forme d'objet d'énumération, appelé iterablestart - Comme son nom l'indique, l'index de départ de l'objet d'énumération est défini par start. si nous ignorons

Explication détaillée du rôle et de la fonction de la table MySQL.proc Explication détaillée du rôle et de la fonction de la table MySQL.proc Mar 16, 2024 am 09:03 AM

Explication détaillée du rôle et de la fonction de la table MySQL.proc MySQL est un système de gestion de bases de données relationnelles populaire. Lorsque les développeurs utilisent MySQL, ils impliquent souvent la création et la gestion de procédures stockées (StoredProcedure). La table MySQL.proc est une table système très importante. Elle stocke les informations relatives à toutes les procédures stockées dans la base de données, y compris le nom, la définition, les paramètres, etc. Dans cet article, nous expliquerons en détail le rôle et les fonctionnalités de la table MySQL.proc

See all articles