ホームページ  >  記事  >  バックエンド開発  >  中国語の英数字、カスタム フォントの PHP 検証コードをサポートします。program_PHP チュートリアル

中国語の英数字、カスタム フォントの PHP 検証コードをサポートします。program_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:10:22851ブラウズ

検証コードはログイン ページ、メッセージ ページ、登録ページでよく使用されます。検証コードの原理は非常に単純です。もちろん、画像には必要な干渉コードを追加する必要があります。その後、サーバー側の SESSION に保存され、セッションが同じかどうかを判断するときにユーザーが送信するのを待ちます。

コードは次のとおりです コードをコピー

/*
* PHP GD Lib をベースにした Captcha クラス
* @作者デザイン
* @バージョン1.0
* @copyright js8.in 2010
* @デモ
* include('captchaClass.php');
* $captchaDemo=新しいキャプチャ();
* $captchaDemo->createImage();
*/
クラスキャプチャ{
//@認証コード画像の高さを定義します
プライベート $height;
//@確認コード画像の幅を定義します
プライベート $width;
//@認証コードの文字数を定義します
プライベート $textNum;
//@検証コードの文字内容を定義します
プライベート $textContent;
//@文字の色を定義します
プライベート $fontColor;
//@ランダムなテキストの色を定義します
プライベート $randFontColor;
//@フォントサイズを定義します
プライベート $fontSize;
//@フォントを定義します
プライベート $fontFamily;
//@背景色を定義します
プライベート $bgColor;
//@ランダムな背景色を定義します
プライベート $randBgColor;
//@文字言語を定義します
プライベート $textLang;
//@干渉点の数を定義します
プライベート $noisePoint;
//@干渉線の数を定義します
プライベート $noiseLine;
//@定義が歪んでいるかどうか
プライベート $distortion;
//@歪んだ画像ソースを定義します
プライベート $distortionImage;
//@境界線があるかどうかを定義します
プライベート $showBorder;
//@検証コードの画像ソースを定義します
プライベート $image;

//@Constructor コンストラクター
パブリック関数 Captcha(){
$this->textNum=4;
$this->fontSize=16;
$this->fontFamily='c:windowsfontsSIMYOU.ttf';//Linux ディレクトリに変更できる中国語フォントを設定します
$this->textLang='en';
$this->noisePoint=30;
$this->noiseLine=3;
$this->distortion=false;
$this->showBorder=false;
}



//@画像の幅を設定します
パブリック関数 setWidth($w){
$this->width=$w;
}

//@画像の高さを設定します
パブリック関数 setHeight($h){
$this->身長=$h;
}

//@文字数を設定します
パブリック関数 setTextNumber($textN){
$this->textNum=$textN;
}

//@文字色を設定します
パブリック関数 setFontColor($fc){
$this->fontColor=sscanf($fc,'#%2x%2x%2x');
}

//@フォントサイズを設定します
パブリック関数 setFontSize($n){
$this->fontSize=$n;
}

//@フォントを設定します
パブリック関数 setFontFamily($ffUrl){
$this->fontFamily=$ffUrl;
}

//@文字言語を設定します
パブリック関数 setTextLang($lang){
$this->textLang=$lang;
}

//@画像の背景を設定します
パブリック関数 setBgColor($bc){
$this->bgColor=sscanf($bc,'#%2x%2x%2x');
}

//@干渉点数を設定
パブリック関数 setNoisePoint($n){
$this->noisePoint=$n;
}

//@干渉線の数を設定します
パブリック関数 setNoiseLine($n){
$this->noiseLine=$n;
}

//@歪ませるかどうかを設定します
パブリック関数 setDistortion($b){
$this->歪み=$b;
}

//@枠線を表示するかどうかを設定します
パブリック関数 setShowBorder($border){
$this->showBorder=$border;
}

//@初期化確認コードの画像
パブリック関数 initImage(){
if(empty($this->width)){$this->width=floor($this->fontSize*1.3)*$this->textNum+10;}
if(empty($this->height)){$this->height=$this->fontSize*2;}
$this->image=imagecreatetruecolor($this->幅,$this->高さ);
if(empty($this->bgColor)){
$this->randBgColor=imagecolorallocate($this->image,mt_rand(100,255),mt_rand(100,255),mt_rand(100,255));
}その他{
$this->randBgColor=imagecolorallocate($this->image,$this->bgColor[0],$this->bgColor[1],$this->bgColor[2]);
}
imagefill($this->image,0,0,$this->randBgColor);
}

//@ランダムな文字を生成します
パブリック関数 randText($type){
$string='';
スイッチ($type){
ケース「en」:
$str='ABCDEFGHJKLMNPQRSTUVWXY3456789';
for($i=0;$itextNum;$i++){
$string=$string.','.$str[mt_rand(0,29)];
}
休憩;
ケース「cn」:
for($i=0;$itextNum;$i++) {
$string=$string.','.chr(rand(0xB0,0xCC)).chr(rand(0xA1,0xBB));
}
$string=iconv('GB2312','UTF-8',$string); //エンコーディングをutf8に変換します
休憩;
}
return substr($string,1);
}

//@認証コードにテキストを出力します
パブリック関数 createText(){
$textArray=explode(',',$this->randText($this->textLang));
$this->textContent=join('',$textArray);
if(empty($this->fontColor)){
$this->randFontColor=imagecolorallocate($this->image,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));
}その他{
$this->randFontColor=imagecolorallocate($this->image,$this->fontColor[0],$this->fontColor[1],$this->fontColor[2]);
}
for($i=0;$itextNum;$i++){
$angle=mt_rand(-1,1)*mt_rand(1,20);
imagettftext($this->image,$this->fontSize,$angle,5+$i*floor($this->fontSize*1.3),floor($this->height*0.75),$this ->randFontColor,$this->fontFamily,$textArray[$i]);
}
}

//@干渉点を生成する
パブリック関数 createNoisePoint(){
for($i=0;$inoisePoint;$i++){
$pointColor=imagecolorallocate($this->image,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
imagesetpixel($this->image,mt_rand(0,$this->幅),mt_rand(0,$this->高さ),$pointColor);
}

}

//@干渉線を生成します
パブリック関数 createNoiseLine(){
for($i=0;$inoiseLine;$i++) {
 $lineColor=imagecolorallocate($this->image,mt_rand(0,255),mt_rand(0,255),20);
 imageline($this->image,0,mt_rand(0,$this->幅),$this->幅,mt_rand(0,$this->高さ),$lineColor);
 }
 }
 
 //@扭曲文字
 パブリック関数distortionText(){
 $this->distortionImage=imagecreatetruecolor($this->幅,$this->高さ);
 imagefill($this->distortionImage,0,0,$this->randBgColor);
 for($x=0;$xwidth;$x++){
 for($y=0;$y高さ;$y++){
 $rgbColor=imagecolorat($this->image,$x,$y);
 imagesetpixel($this->distortionImage,(int)($x+sin($y/$this->高さ*2*M_PI-M_PI*0.5)*3),$y,$rgbColor);
 }
 }
 $this->image=$this->歪み画像;
 }
 
 //@生成验证码图片
 パブリック関数 createImage(){
 $this->initImage(); //基本画像
を作成  $this->createText(); //出验证码文字
 if($this->distortion){$this->distortionText();} //扭曲文字
 $this->createNoisePoint(); //産干扰点
 $this->createNoiseLine(); //産干扰線
 if($this->showBorder){imagerectangle($this->image,0,0,$this->width-1,$this->height-1,$this->randFontColor);} //追加边框
 imagepng($this->image);
 imagedestroy($this->image);
 if($this->distortion){imagedestroy($this->$distortionImage);}
 $this->textContentを返す;
 }
 
}
?>使用方法:

//session_start();
header("コンテンツタイプ:画像/png");
include('captcha5_class.php');
$captcha5=新しいキャプチャ();
 
//@设置验证码宽度
//$captcha5->setWidth(200);
 
//@設置验证码高さ
//$captcha5->setHeight(50);
 
//@设置文字数
$captcha5->setTextNumber(5);
 
//@设置文字符颜色
//$captcha5->setFontColor('#ff9900');
 
//@设置字号大小
//$captcha5->setFontSize(25);
 
//@设置文字体
$captcha5->setFontFamily('c:windowsfontsSTXINGKA.TTF');
 
//@设置语言
$captcha5->setTextLang('cn');
 
//@設置背景颜色
//$captcha5->setBgColor('#000000');
 
//@设置干扰点数
//$captcha5->setNoisePoint(600);
 
//@设置干扰線数
//$captcha5->setNoiseLine(10);
 
//@设置是否扭曲
//$captcha5->setDistortion(true);
 
//@設置かどうか表示边框
$captcha5->setShowBorder(true);
 
//出验证码
$code=$captcha5->createImage();
//$_SESSION['captchaCode']['content']=$code;
//$_SESSION['captchaCode']['time']=microtime();
?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/629671.html技術記事验证コードは、登陆页面、留言面、注記页面、验证コードの原理原則: GD 库创を利用して図片を作成し、図片は当然必要な乾燥コードを追加してからサーバーに保存します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。