后盾网视频中出现过的验证码类
这个是我在一个论坛上发现的验证码类,自己改动了一下,效果和后盾网视频中的是类似的,只不过字体会有点不一样,附录里我放了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元

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Erfahren Sie anhand einführender Codebeispiele mehr über die Python-Programmierung. Python ist eine leicht zu erlernende und dennoch leistungsstarke Programmiersprache. Für Anfänger ist es sehr wichtig, die einführenden Codebeispiele der Python-Programmierung zu verstehen. In diesem Artikel finden Sie einige konkrete Codebeispiele, die Ihnen den schnellen Einstieg erleichtern. Print HelloWorldprint("HelloWorld") Dies ist das einfachste Codebeispiel in Python. Mit der Funktion print() wird der angegebene Inhalt ausgegeben

PHP-Variablen speichern Werte während der Programmlaufzeit und sind für den Aufbau dynamischer und interaktiver WEB-Anwendungen von entscheidender Bedeutung. Dieser Artikel wirft einen detaillierten Blick auf PHP-Variablen und zeigt sie anhand von 10 Beispielen aus der Praxis. 1. Benutzereingaben speichern $username=$_POST["username"];$passWord=$_POST["password"]; Dieses Beispiel extrahiert den Benutzernamen und das Passwort aus der Formularübermittlung und speichert sie zur weiteren Verarbeitung in Variablen. 2. Legen Sie den Konfigurationswert $database_host="localhost";$database_username="username";$database_pa fest

Titel: Vom Anfänger zur Meisterschaft: Code-Implementierung häufig verwendeter Datenstrukturen in der Go-Sprache. Datenstrukturen spielen eine wichtige Rolle in der Programmierung und sind die Grundlage der Programmierung. In der Go-Sprache gibt es viele häufig verwendete Datenstrukturen, und die Beherrschung der Implementierung dieser Datenstrukturen ist entscheidend, um ein guter Programmierer zu werden. In diesem Artikel werden die häufig verwendeten Datenstrukturen in der Go-Sprache vorgestellt und entsprechende Codebeispiele gegeben, um den Lesern den Einstieg bis zur Beherrschung dieser Datenstrukturen zu erleichtern. 1. Array Array ist eine grundlegende Datenstruktur, bei der es sich um eine Gruppe desselben Typs handelt.

So schreiben Sie mit PHP den Funktionscode für die Bestandsverwaltung im Bestandsverwaltungssystem. Die Bestandsverwaltung ist für viele Unternehmen ein unverzichtbarer Bestandteil. Für Unternehmen mit mehreren Lagern ist die Bestandsverwaltungsfunktion besonders wichtig. Durch die ordnungsgemäße Verwaltung und Nachverfolgung des Lagerbestands können Unternehmen den Lagerbestand auf verschiedene Lager verteilen, die Betriebskosten optimieren und die Effizienz der Zusammenarbeit verbessern. In diesem Artikel erfahren Sie, wie Sie mit PHP Code für Lagerverwaltungsfunktionen schreiben und erhalten relevante Codebeispiele. 1. Richten Sie die Datenbank ein, bevor Sie mit dem Schreiben des Codes für die Lagerverwaltungsfunktion beginnen.

Das einfachste Codebeispiel für die Blasensortierung in Java ist ein allgemeiner Sortieralgorithmus. Seine Grundidee besteht darin, die zu sortierende Reihenfolge durch Vergleich und Austausch benachbarter Elemente schrittweise anzupassen. Hier ist ein einfaches Java-Codebeispiel, das zeigt, wie die Blasensortierung implementiert wird: publicclassBubbleSort{publicstaticvoidbubbleSort(int[]arr){int

„Beispiele zur Go-Sprachprogrammierung: Codebeispiele in der Webentwicklung“ Mit der rasanten Entwicklung des Internets ist die Webentwicklung zu einem unverzichtbaren Bestandteil verschiedener Branchen geworden. Als Programmiersprache mit leistungsstarken Funktionen und überlegener Leistung wird die Go-Sprache von Entwicklern in der Webentwicklung zunehmend bevorzugt. In diesem Artikel wird anhand spezifischer Codebeispiele erläutert, wie die Go-Sprache für die Webentwicklung verwendet wird, damit die Leser die Go-Sprache besser verstehen und zum Erstellen ihrer eigenen Webanwendungen verwenden können. 1. Einfacher HTTP-Server Beginnen wir zunächst mit a

Huawei Cloud Edge Computing Interconnection Guide: Java-Codebeispiele zur schnellen Implementierung von Schnittstellen Mit der rasanten Entwicklung der IoT-Technologie und dem Aufstieg des Edge Computing beginnen immer mehr Unternehmen, der Anwendung von Edge Computing Aufmerksamkeit zu schenken. Huawei Cloud bietet Edge-Computing-Dienste und stellt Unternehmen äußerst zuverlässige Computerressourcen und eine praktische Entwicklungsumgebung zur Verfügung, wodurch Edge-Computing-Anwendungen einfacher zu implementieren sind. In diesem Artikel erfahren Sie, wie Sie die Huawei Cloud Edge Computing-Schnittstelle schnell über Java-Code implementieren. Zuerst müssen wir die Entwicklungsumgebung vorbereiten. Stellen Sie sicher, dass Sie das Java Development Kit installiert haben (

Code-Schreibanleitung und Beispiele für die Java-Auswahlsortierung Die Auswahlsortierung ist ein einfacher und intuitiver Sortieralgorithmus. Die Idee besteht darin, jedes Mal das kleinste (oder größte) Element aus den unsortierten Elementen auszuwählen und es auszutauschen, bis alle Elemente sortiert sind. Dieser Artikel enthält eine Anleitung zum Schreiben von Code für die Auswahlsortierung und fügt spezifischen Java-Beispielcode hinzu. Algorithmusprinzip Das Grundprinzip der Auswahlsortierung besteht darin, das zu sortierende Array in zwei Teile zu unterteilen: sortiert und unsortiert. Dabei wird jeweils das kleinste (oder größte) Element aus dem unsortierten Teil ausgewählt und am Ende des sortierten Teils platziert. Wiederholen Sie das oben Gesagte
