后盾网视频中出现过的验证码类
这个是我在一个论坛上发现的验证码类,自己改动了一下,效果和后盾网视频中的是类似的,只不过字体会有点不一样,附录里我放了5个自己找的字体,都算是比较容易辨识的。
类的用法请自己研究,这个是很简单的东西。<?php <br />
/**<br>
* 安全验证码<br>
* <br>
* 安全的验证码要:验证码文字扭曲、旋转,使用不同字体,添加干扰码。<br>
* 如果用中文做验证码(我这里不是哦,有兴趣你来改成用中文的),安全度会更好些,但验证码扭曲和旋转是王道,用了字体也算是已经给字体扭曲了,我就不再去给他添一只扭曲的足了。<br>
* 可配置的属性都是一些简单直观的变量,我就不用弄一堆的setter/getter了<br>
*<br>
* @author 流水孟春 <cmpan><br>
* @copyright NEW BSD<br>
* @link http://labs.yulans.cn/YL_Security_Secoder<br>
* @link http://wiki.yulans.cn/docs/yl/security/secoder<br>
*<br>
* @editor <me><br>
* @copyright Apache<br>
* 于2013年12月14日 修改本文件,美化了生成的验证码,并适配于ThinkPHP<br>
*/<br>
class VerifyCode {<br>
/**<br>
* 验证码的session的下标<br>
* <br>
* @var string<br>
*/<br>
public static $seKey = 'vcode';<br>
public static $expire = 100; // 验证码过期时间(s)<br>
/**<br>
* 验证码中使用的字符,01IO容易混淆,建议不用<br>
*<br>
* @var string<br>
*/<br>
public static $codeSet = '346789ABCDEFGHJKLMNPQRTUVWXY';<br>
public static $fontSize = 25; // 验证码字体大小(px)<br>
public static $useCurve = true; // 是否画混淆曲线<br>
public static $useNoise = true; // 是否添加杂点 <br>
public static $imageH = 0; // 验证码图片宽<br>
public static $imageL = 0; // 验证码图片长<br>
public static $length = 4; // 验证码位数<br>
public static $bg = array(243, 251, 254); // 背景<br>
<br>
protected static $_image = null; // 验证码图片实例<br>
protected static $_color = null; // 验证码字体颜色<br>
<br>
public static function createImage() {<br>
// 图片宽(px)<br>
self::$imageL || self::$imageL = self::$length * self::$fontSize * 1.5 + self::$fontSize*1.5; <br>
// 图片高(px)<br>
self::$imageH || self::$imageH = self::$fontSize * 2;<br>
// 建立一幅 self::$imageL x self::$imageH 的图像<br>
self::$_image = imagecreate(self::$imageL, self::$imageH); <br>
// 设置背景 <br>
imagecolorallocate(self::$_image, self::$bg[0], self::$bg[1], self::$bg[2]); <br>
// 验证码字体随机颜色<br>
self::$_color = imagecolorallocate(self::$_image, mt_rand(1,120), mt_rand(1,120), mt_rand(1,120));<br>
// 验证码使用随机字体 <br>
$ttf = APP_PATH . '../Public/font/vcode/'.mt_rand(1, 5).'.ttf'; <br>
<br>
if (self::$useNoise) {<br>
// 绘杂点<br>
self::_writeNoise();<br>
} <br>
if (self::$useCurve) {<br>
// 绘干扰线<br>
self::_writeCurve();<br>
}<br>
<br>
// 绘验证码<br>
$code = array(); // 验证码<br>
$codeNX = 0; // 验证码第N个字符的左边距<br>
for ($i = 0; $i<:></:>
$code[$i] = self::$codeSet[mt_rand(0, 27)];<br>
$codeNX += mt_rand(self::$fontSize*1.2, self::$fontSize*1.6);<br>
// 写一个验证码字符<br>
imagettftext(self::$_image, self::$fontSize, mt_rand(-40, 70), $codeNX, self::$fontSize*1.5, self::$_color, $ttf, $code[$i]);<br>
}<br>
// 保存验证码<br>
XS(self::$seKey,strtolower(join('', $code)),$expire);<br>
<br>
header('Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate');<br>
header('Cache-Control: post-check=0, pre-check=0', false); <br>
header('Pragma: no-cache'); <br>
header("content-type: image/png");<br>
<br>
// 输出图像<br>
imagepng(self::$_image); <br>
imagedestroy(self::$_image);<br>
}<br>
<br>
/** <br>
* 画一条由两条连在一起构成的随机正弦函数曲线作干扰线(你可以改成更帅的曲线函数) <br>
* <br>
* 高中的数学公式咋都忘了涅,写出来<br>
* 正弦型函数解析式:y=Asin(ωx+φ)+b<br>
* 各常数值对函数图像的影响:<br>
* A:决定峰值(即纵向拉伸压缩的倍数)<br>
* b:表示波形在Y轴的位置关系或纵向移动距离(上加下减)<br>
* φ:决定波形与X轴位置关系或横向移动距离(左加右减)<br>
* ω:决定周期(最小正周期T=2π/∣ω∣)<br>
*<br>
*/<br>
protected static function _writeCurve() {<br>
$A = mt_rand(1, self::$imageH/2); // 振幅<br>
$b = mt_rand(-self::$imageH/4, self::$imageH/4); // Y轴方向偏移量<br>
$f = mt_rand(-self::$imageH/4, self::$imageH/4); // X轴方向偏移量<br>
$T = mt_rand(self::$imageH*1.5, self::$imageL*2); // 周期<br>
$w = (2* M_PI)/$T;<br>
<br>
$px1 = 0; // 曲线横坐标起始位置<br>
$px2 = mt_rand(self::$imageL/2, self::$imageL * 0.667); // 曲线横坐标结束位置 <br>
for ($px=$px1; $px
if ($w!=0) {<br>
$py = $A * sin($w*$px + $f)+ $b + self::$imageH/2; // y = Asin(ωx+φ) + b<br>
$i = (int) ((self::$fontSize - 6)/4);<br>
while ($i > 0) { <br>
imagesetpixel(self::$_image, $px + $i, $py + $i, self::$_color); // 这里画像素点比imagettftext和imagestring性能要好很多 <br>
$i--;<br>
}<br>
}<br>
}<br>
<br>
$A = mt_rand(1, self::$imageH/2); // 振幅 <br>
$f = mt_rand(-self::$imageH/4, self::$imageH/4); // X轴方向偏移量<br>
$T = mt_rand(self::$imageH*1.5, self::$imageL*2); // 周期<br>
$w = (2* M_PI)/$T; <br>
$b = $py - $A * sin($w*$px + $f) - self::$imageH/2;<br>
$px1 = $px2;<br>
$px2 = self::$imageL;<br>
for ($px=$px1; $px
if ($w!=0) {<br>
$py = $A * sin($w*$px + $f)+ $b + self::$imageH/2; // y = Asin(ωx+φ) + b<br>
$i = (int) ((self::$fontSize - 8)/4);<br>
while ($i > 0) { <br>
imagesetpixel(self::$_image, $px + $i, $py + $i, self::$_color); // 这里(while)循环画像素点比imagettftext和imagestring用字体大小一次画出(不用这while循环)性能要好很多 <br>
$i--;<br>
}<br>
}<br>
}<br>
}<br>
<br>
/**<br>
* 画杂点<br>
* 往图片上写不同颜色的字母或数字<br>
*/<br>
protected static function _writeNoise() {<br>
for($i = 0; $i
//杂点颜色<br>
$noiseColor = imagecolorallocate(<br>
self::$_image, <br>
mt_rand(150,225), <br>
mt_rand(150,225), <br>
mt_rand(150,225)<br>
);<br>
for($j = 0; $j
// 绘杂点<br>
imagestring(<br>
self::$_image,<br>
5, <br>
mt_rand(-10, self::$imageL), <br>
mt_rand(-10, self::$imageH), <br>
self::$codeSet[mt_rand(0, 27)], // 杂点文本为随机的字母或数字<br>
$noiseColor<br>
);<br>
}<br>
}<br>
}<br>
<br>
/**<br>
* 验证验证码是否正确<br>
*<br>
* @param string $code 用户验证码<br>
* @return bool 用户验证码是否正确<br>
*/<br>
public static function check($code) {<br>
// 验证码不能为空<br>
if(empty($code)) <br>
return false;<br>
if(session(self::$seKey)==strtolower($code)){<br>
session('vcode',null);<br>
return true;<br>
}else{<br>
return false;<br>
}<br>
}<br>
}</me></cmpan>
vcode.zip
( 376.13 KB 下载:266 次 )
AD:真正免费,域名+虚机+企业邮箱=0元

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Sujets chauds

Découvrez la programmation Python avec des exemples de code d'introduction. Python est un langage de programmation facile à apprendre mais puissant. Pour les débutants, il est très important de comprendre les exemples de code d’introduction à la programmation Python. Cet article vous fournira quelques exemples de code concrets pour vous aider à démarrer rapidement. Imprimer HelloWorldprint("HelloWorld") Il s'agit de l'exemple de code le plus simple en Python. La fonction print() est utilisée pour afficher le contenu spécifié

Les variables PHP stockent les valeurs pendant l'exécution du programme et sont cruciales pour créer des applications WEB dynamiques et interactives. Cet article examine en profondeur les variables PHP et les montre en action avec 10 exemples réels. 1. Stocker l'entrée de l'utilisateur $username=$_POST["username"];$passWord=$_POST["password"]; Cet exemple extrait le nom d'utilisateur et le mot de passe de la soumission du formulaire et les stocke dans des variables pour un traitement ultérieur. 2. Définissez la valeur de configuration $database_host="localhost";$database_username="username";$database_pa

"Exemples de programmation en langage Go : exemples de code dans le développement Web" Avec le développement rapide d'Internet, le développement Web est devenu un élément indispensable dans diverses industries. En tant que langage de programmation doté de fonctions puissantes et de performances supérieures, le langage Go est de plus en plus privilégié par les développeurs en développement Web. Cet article expliquera comment utiliser le langage Go pour le développement Web à travers des exemples de code spécifiques, afin que les lecteurs puissent mieux comprendre et utiliser le langage Go pour créer leurs propres applications Web. 1. Serveur HTTP simple Commençons par un

L'exemple de code le plus simple du tri à bulles Java est un algorithme de tri courant. Son idée de base est d'ajuster progressivement la séquence à trier en une séquence ordonnée grâce à la comparaison et à l'échange d'éléments adjacents. Voici un exemple de code Java simple qui montre comment implémenter le tri à bulles : publicclassBubbleSort{publicstaticvoidbubbleSort(int[]arr){int

Titre : Du débutant à la maîtrise : implémentation du code des structures de données couramment utilisées dans le langage Go. Les structures de données jouent un rôle essentiel dans la programmation et constituent la base de la programmation. Dans le langage Go, il existe de nombreuses structures de données couramment utilisées, et maîtriser la mise en œuvre de ces structures de données est crucial pour devenir un bon programmeur. Cet article présentera les structures de données couramment utilisées dans le langage Go et donnera des exemples de code correspondants pour aider les lecteurs à démarrer et à maîtriser ces structures de données. 1. Array Array est une structure de données de base, qui est un groupe du même type.

Guide d'interconnexion Huawei Cloud Edge Computing : exemples de code Java pour implémenter rapidement des interfaces Avec le développement rapide de la technologie IoT et l'essor de l'informatique de pointe, de plus en plus d'entreprises commencent à s'intéresser à l'application de l'informatique de pointe. Huawei Cloud fournit des services d'informatique de pointe, offrant aux entreprises des ressources informatiques hautement fiables et un environnement de développement pratique, facilitant ainsi la mise en œuvre des applications d'informatique de pointe. Cet article explique comment implémenter rapidement l'interface informatique de pointe Huawei Cloud via le code Java. Tout d’abord, nous devons préparer l’environnement de développement. Assurez-vous que le kit de développement Java est installé (

Comment utiliser PHP pour écrire le code de la fonction de gestion des stocks dans le système de gestion des stocks La gestion des stocks est un élément indispensable dans de nombreuses entreprises. Pour les entreprises disposant de plusieurs entrepôts, la fonction de gestion des stocks est particulièrement importante. En gérant et en suivant correctement les stocks, les entreprises peuvent répartir les stocks entre différents entrepôts, optimiser les coûts d'exploitation et améliorer l'efficacité de la collaboration. Cet article explique comment utiliser PHP pour écrire du code pour les fonctions de gestion d'entrepôt et vous fournit des exemples de code pertinents. 1. Établissez la base de données avant de commencer à écrire le code de la fonction de gestion des entrepôts de stocks.

Guide de rédaction de code et exemples de la méthode de tri par sélection Java Le tri par sélection est un algorithme de tri simple et intuitif. L'idée est de sélectionner à chaque fois l'élément le plus petit (ou le plus grand) parmi les éléments non triés et de l'échanger jusqu'à ce que tous les éléments soient triés. Cet article fournira un guide d'écriture de code pour le tri des sélections et joindra un exemple de code Java spécifique. Principe de l'algorithme Le principe de base du tri par sélection est de diviser le tableau à trier en deux parties, triée et non triée. A chaque fois, le plus petit (ou le plus grand) élément est sélectionné dans la partie non triée et placé à la fin de la partie triée. Répétez ce qui précède
