[php]
/**
* 画像認証コードカテゴリ
* イメージタイプの検証コードを生成します。検証コードには数字と大文字が含まれます。MD5 で暗号化された検証コードがセッションに保存されます。
*
* 使用方法:
* $captcha = 新しい Catpcha();
* $captcha->buildAndExportImage();
*
*作者:羅京
*作成時間: 2013-3-27 11:42:12 AM
*/
クラス キャプチャ {
プライベート $width;//幅
プライベート $height; //身長
Private $codeNum;//確認コードの文字数
Private $image;//検証コード画像リソース
Private $sessionKey;//セッションに保存された名前
Private $captcha;//検証コード文字列
const charWidth = 10;//出力文字サイズに応じて1文字の幅が変わります
/**
* 検証コードクラスを作成し、関連パラメータを初期化します
* @param $width 画像幅
* @param $height 画像の高さ
* @param $codeNum 確認コードの文字数
* @param $sessionKey セッションに保存された名前
*/
関数 __construct($width = 50, $height = 20, $codeNum = 4, $sessionKey = 'captcha') {
$this->width = $width;
$this->height = $height;
$this->codeNum = $codeNum;
$this->sessionKey = $sessionKey;
//最小の高さと幅を保証します
if($height < 20) {
$this->高さ = 20;
}
If($width < ($codeNum * self::charWidth + 10)) {//左側と右側に 5 ピクセルのギャップを確保します
$this->width = $codeNum * self::charWidth + 10;
}
}
/**
* 認証コード画像を構築して出力します
*/
パブリック関数 buildAndExportImage() {
$this->createImage();
$this->setDisturb();
$this->setCaptcha();
$this->exportImage();
}
/**
* 画像を構築し、背景色を設定します
*/
プライベート関数 createImage() {
// 画像画像を作成
$this->image = imagecreatetruecolor($this->width, $this->height);
//背景色を作成します
$bg = imagecolorallocate($this->image, mt_rand(220, 255), mt_rand(220, 255), mt_rand(220, 255));
//背景色を塗りつぶします
imagefilledrectangle($this->image, 0, 0, $this->width - 1, $this->height - 1, $bg);
}
/**
* 干渉要素を設定します
*/
プライベート関数 setDisturb() {
//干渉点を設定します
for($i = 0; $i $color = imagecolorallocate($this->image, mt_rand(150, 200), mt_rand(150, 200), mt_rand(150, 200));
imagesetpixel($this->image, mt_rand(5, $this->width - 10), mt_rand(5, $this->height - 3), $color);
}
//設置干扰線
for($i = 0; $i
$color = imagecolorallocate($this->image, mt_rand(150, 220), mt_rand(150, 220), mt_rand(150, 220));
imagearc($this->image, mt_rand(-10, $this->幅), mt_rand(-10, $this->高さ), mt_rand(30, 300), mt_rand(20, 200), 55 、44、$color);
}
//创建边框色
$border = imagecolorallocate($this->image, mt_rand(0, 50), mt_rand(0, 50), mt_rand(0, 50));
//画边框
imagerectangle($this->image, 0, 0, $this->width - 1, $this->height - 1, $border);
}
/**
* 検証コードを生成して描画します
*/
プライベート関数 setCaptcha() {
$str = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ';
// 验证码文字符を生成
for($i = 0; $i codeNum; $i++) {
$this->captcha .= $str{mt_rand(0, strlen($str) - 1)};
}
//绘制验证码
for($i = 0; $i
$color = imagecolorallocate($this->image, mt_rand(0, 200), mt_rand(0, 200), mt_rand(0, 200));
$x = フロア(($this->width - 10)/$this->codeNum);
$x = $x*$i + Floor(($x-self::charWidth)/2) + 5;
$y = mt_rand(2, $this->高さ - 20);
imagechar($this->image, 5, $x, $y, $this->captcha{$i}, $color);
}
}
/*
* 出力画像、セッション中に保存
*/
プライベート関数exportImage() {
if(imagetypes() & IMG_GIF){
header('Content-type:image/gif');
imagegif($this->image);
} else if(imagetypes() & IMG_PNG){
header('コンテンツタイプ:画像/png');
imagepng($this->iamge);
} else if(imagetypes() & IMG_JPEG) {
header('コンテンツタイプ:画像/jpeg');
imagepng($this->iamge);
} その他 {
imagedestroy($this->image);
die("画像タイプをサポートしていません!");
}
// 验证码情報をセッション中に保存します、md5加密
if(!isset($_SESSION)){
セッション開始();
}
$_SESSION[$this->sessionKey] = md5($this->captcha);
imagedestroy($this->image);
}
関数 __destruct() {
unset($this->幅, $this->高さ, $this->コード番号,$this->キャプチャ);
}
}
/**
* 画像認証コードカテゴリ
* イメージタイプの認証コードを生成します。認証コードには数字と大文字が含まれます。MD5 で暗号化された認証コードがセッションに保存されます。
*
* 使用方法:
* $captcha = 新しい Catpcha();
* $captcha->buildAndExportImage();
*
*作者:羅京
*作成時間: 2013-3-27 11:42:12 AM
*/
クラス キャプチャ {
private $width;//幅
private $height; //身長
private $codeNum;//認証コードの文字数
private $image; //検証コード画像リソース
private $sessionKey;//セッションに保存された名前
private $captcha;//検証コード文字列
const charWidth = 10 //単一文字の幅、出力文字サイズに応じて変化します
;
/**
* 検証コードクラスを作成し、関連パラメータを初期化します
* @param $width 画像幅
* @param $height 画像の高さ
* @param $codeNum 確認コードの文字数
* @param $sessionKey セッションに保存された名前
*/
function __construct($width = 50, $height = 20, $codeNum = 4, $sessionKey = 'captcha') {
$this->width = $width;
$this->height = $height;
$this->codeNum = $codeNum;
$this->sessionKey = $sessionKey;
// 最小の高さと幅を保証します
if($height < 20) {
$this->高さ = 20;
}
if($width < ($codeNum * self::charWidth + 10)) {//左右に 5 ピクセルのギャップを確保します
$this->width = $codeNum * self::charWidth + 10;
}
}
/**
* 認証コード画像を構築して出力します
*/
パブリック関数 buildAndExportImage() {
$this->createImage();
$this->setDisturb();
$this->setCaptcha();
$this->exportImage();
}
/**
*画像を構築し、背景色を設定します
*/
プライベート関数 createImage() {
//画像を作成します
$this->image = imagecreatetruecolor($this->幅, $this->高さ);
//背景色を作成します
$bg = imagecolorallocate($this->image, mt_rand(220, 255), mt_rand(220, 255), mt_rand(220, 255));
//背景色を塗りつぶします
imagefilledrectangle($this->image, 0, 0, $this->width - 1, $this->height - 1, $bg);
}
/**
* 不穏な要素を設定します
*/
プライベート関数 setDisturb() {
//干渉点を設定します
for($i = 0; $i < 150; $i++) {
$color = imagecolorallocate($this->image, mt_rand(150, 200), mt_rand(150, 200), mt_rand(150, 200));
imagesetpixel($this->image, mt_rand(5, $this->width - 10), mt_rand(5, $this->height - 3), $color);
}
//干渉ラインを設定します
for($i = 0; $i < 10; $i++) {
$color = imagecolorallocate($this->image, mt_rand(150, 220), mt_rand(150, 220), mt_rand(150, 220));
imagearc($this->image, mt_rand(-10, $this->幅), mt_rand(-10, $this->高さ), mt_rand(30, 300), mt_rand(20, 200), 55 、44、$color);
}
//枠線の色を作成する
$border = imagecolorallocate($this->image, mt_rand(0, 50), mt_rand(0, 50), mt_rand(0, 50));
//境界線を描画します
imagerectangle($this->image, 0, 0, $this->width - 1, $this->height - 1, $border);
}
/**
* 検証コードを生成して描画します
*/
プライベート関数 setCaptcha() {
$str = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ';
//検証コード文字を生成します
for($i = 0; $i <$this->codeNum; $i++) {
$this->captcha .= $str{mt_rand(0, strlen($str) - 1)};
}
//認証コードを描画します
for($i = 0; $i
$color = imagecolorallocate($this->image, mt_rand(0, 200), mt_rand(0, 200), mt_rand(0, 200));
$x = フロア(($this->width - 10)/$this->codeNum);
$x = $x*$i + Floor(($x-self::charWidth)/2) + 5;
$y = mt_rand(2, $this->高さ - 20);
imagechar($this->image, 5, $x, $y, $this->captcha{$i}, $color);
}
}
/*
* 出力画像、セッション中に保存
*/
プライベート関数exportImage() {
if(imagetypes() & IMG_GIF){
header('Content-type:image/gif');
imagegif($this->image);
} else if(imagetypes() & IMG_PNG){
header('コンテンツタイプ:画像/png');
imagepng($this->iamge);
} else if(imagetypes() & IMG_JPEG) {
header('コンテンツタイプ:画像/jpeg');
imagepng($this->iamge);
} その他 {
imagedestroy($this->image);
die("画像タイプをサポートしません!");
}
// 認証コード情報をセッション中に保存します、md5加密
if(!isset($_SESSION)){
session_start();
}
$_SESSION[$this->sessionKey] = md5($this->captcha);
imagedestroy($this->image);
}
関数 __destruct() {
unset($this->幅, $this->高さ, $this->コード番号,$this->キャプチャ);
}
}