コードをコピーします コードは次のとおりです:
/*
* PHP GD Lib に基づく Captcha クラス
* @author Design
* @version 1.0
* @demo
* include('captchaClass.php')
* $captchaDemo=new Captcha ();
* $captchaDemo->createImage();
*/
class Captcha{
//@検証コード画像の高さを定義します
private $height;
private $width;
//@検証コードの文字数を定義します
private $textNum;
//@検証コードの文字の内容を定義します
private $textContent;
//@文字の色を定義します
private $fontColor;
//@ランダムなテキストの色を定義します
private $randFontColor;
//@フォントのサイズを定義します
private $fontFamily;
//@背景の色を定義します
//@ランダムな背景色を定義
private $randBgColor;
//@文字言語を定義
//@干渉点の数を定義
private $noisePoint;
private $noiseLine;
//@歪んでいるかどうかを定義
private $distortion;
//@境界線があるかどうかを定義
/ /@検証コード画像ソースを定義します
private $image;
//@Constructor コンストラクター
public function Captcha(){
$this->gt;f
$this->f // Linux ディレクトリに変更できる中国語フォントを設定します
$this->noisePoint=30;
$this ->distortion=false;
$this->showBorder=false;
//@画像の幅を設定します
public function setWidth($w){
$this->width=$w}
//@画像の高さを設定する
public function setHeight($h){
$this-> height=$h}
//@文字数を設定する
public function setTextNumber($textN){
$this ->textNum=$textN;
}
//@文字の色を設定する
public function setFontColor($ fc){
$this->f
}
//@フォントサイズを設定する
public function setFontSize($n ){
$this->f
}
//@フォントを設定する
public function setFontFamily($ffUrl) {
$this->f
}
//@文字言語を設定する
public function setTextLang($lang) {
$this->textLang=$lang;
}
//@画像の背景を設定する
public function setBgColor ($bc){
$this->bgColor=sscanf($bc,'#%2x%2x% 2x');
}
//@干渉点の数を設定する
public function setNoisePoint($n){
$ this->noisePoint=$n;
//@干渉するラインの数を設定する
public function setNoiseLine($n){
$this->noiseLine=$n;
}
//@歪ませるかどうかを設定
public function setDistortion($b){
$this->distortion=$b;
}
//@枠線を表示するかどうかを設定
public function setShowBorder($border){
$this->showBorder=$border;
}
//@初期化確認コードimage
public function 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->width,$this->height);
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);
}
//@ランダムな文字を生成する
public function randText ($type){
$string=''; type){
case 'en':
$str='ABCDEFGHJKLMNPQRSTUVWXY3456789';
for($i=0;$i<$this->textNum ;$i++){
$string=$string.','。 $str[mt_rand(0,29)];
}
break;
case 'cn':
for($i=0;$itextNum;$i++) {
$string=$string .','.chr(rand(0xB0,0xCC)).chr(rand(0xA1,0xBB))
}
$string=iconv(' GB2312','UTF-8',$string); utf8 にエンコードする
break;
}
return substr($string,1)
}
//@検証コードにテキストを出力する
public function createText( ){
$textArray=explode(',',$this-> ;randText($this->textLang));
$this->textC
if(empty($this->fontColor)){
$this->randF
}else{
$this-> randF
}
for($i=0;$itextNum;$i++){
$angle=mt_rand(-1, 1)*mt_rand(1,20); >画像,$this->fontSize,$angle,5+$i*floor($this->fontSize*1.3),floor($this->height*0.75),$this->randFontColor, $this->fontFamily,$textArray[$i]);
}
}
//@干渉点を生成する
public function createNoisePoint(){
for($i=0;$i<$this->noisePoint ;$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);
//@干渉ラインを生成する
public function createNoiseLine(){
for($i=0;$i<$this->noiseLine;$i++) {
$lineColor=imagecolorallocate($this->image,mt_rand) (0,255),mt_rand(0,255),20);
imageline($this->image,0,mt_rand(0,$this->width),$this->width,mt_rand(0,$this- >height),$lineColor);
}
}
//@歪みテキスト
パブリック関数distortionText(){
$this->distorti
imagefill($this->distortionImage,0,0,$this- >randBgColor);
for($x=0;$x幅;$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->distortionImage;
//@検証コード画像を生成
public function createImage (){
$this->initImage(); //基本画像を作成
$this->createText() //検証コード文字を出力
if($this->distortion); > distributionText();} //テキストを歪ませる
$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);}
return $this->textContent;
}
}
?>使用法:
//session_start();
include('captcha5_class.php'); new Captcha();
//@検証コードの幅を設定します
//$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()?>
上記は、中国語の英数字とカスタム フォントをサポートする 12306 検証コードを紹介しており、12306 検証コードの内容も含めて、PHP チュートリアルに興味のある友人に役立つことを願っています。