ホームページ >バックエンド開発 >PHPチュートリアル >PHP画像検証コード生成プログラム code_PHPチュートリアル

PHP画像検証コード生成プログラム code_PHPチュートリアル

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

ここでは 2 つの検証コード生成プログラムを紹介します。最初のプログラムはより優れており、2 番目のプログラムもまた優れています。同時に、第 2 世代のプログラムは検証コードの呼び出しと生成を説明するために 2 つあります。ここでは、検証コード生成プログラムについて説明します。最初のプログラムの方が優れていますが、2 番目のプログラムも完全な例を使用して検証コードの呼び出しと生成を示しています。 */

セッション開始(); クラス認証番号 {
//画像オブジェクト、幅、高さ、検証コードの長さ
プライベート
プライベート $im_width
プライベート $im_height
プライベート $len
//ランダムな文字列、Y軸座標値、ランダムな色
プライベート $randnum
プライベート $y
プライベート $rancolor
//背景色は赤、緑、青で、デフォルトはライトグレーです
パブリック $red=238; パブリック $green=238; パブリック $blue=238; /**
* オプション設定: 検証コードの種類、干渉点、干渉線、Y 軸ランダム
* 無効にするには false に設定します
**/
//デフォルトは大文字と小文字の数字の組み合わせであり、1 2 3 はそれぞれ小文字、大文字、数字を表します
パブリック $ext_num_type=''; public $ext_pixel = false //干渉点
; public $ext_line = false //干渉ライン
; public $ext_rand_y= true //y 軸ランダム
; 関数 __construct ($len=4,$im_width='',$im_height=25) {
// 検証コードの長さ、画像の幅、高さはクラスをインスタンス化するときに必要なデータです
$this->len = $len = $len * 15; $this->im_width = $im_width
$this->im_height= $im_height; $this->im = imagecreate($im_width,$im_height); }
//画像の背景色を設定します。デフォルトはライトグレーの背景です
関数 set_bgcolor () {
imagecolorallocate($this->im,$this->red,$this->green,$this->blue
); }
// 任意の数値のランダムなコードを取得します
関数 get_randnum () {
$an1 = 'abcdefghijklmnopqrstuvwxyz'; $an2 = 'abcdefghijklmnopqrstuvwxyz'; $an3 = '0123456789'; if ($this->ext_num_type == '') $str = $an1.$an2.$an3; if ($this->ext_num_type == 1) $str = $an1; if ($this->ext_num_type == 2) $str = $an2; if ($this->ext_num_type == 3) $str = $an3; for ($i = 0; $i len; $i++) {
$start = rand(1,strlen($str) - 1); $randnum .= substr($str,$start,1); }
$this->randnum = $randnum; $_session[an] = $this->ランダム
}
// 検証コード画像の Y 軸を取得します
関数 get_y () {
if ($this->ext_rand_y) $this->y = rand(5, $this->im_height/5); それ以外の場合 $this->y = $this->im_height / 4 ; }
// ランダムな色を取得します
関数 get_randcolor () {
$this->randcolor = imagecolorallocate($this->im,rand(0,100),rand(0,150),rand(0,200)); }
//干渉点を追加します
関数 set_ext_pixel () {
if ($this->ext_pixel) {
for($i = 0; $i $this->get_randcolor(); imagesetpixel($this->im, rand()%100, rand()%100, $this->randcolor); }
}
}
//干渉線を追加
関数 set_ext_line () {
if ($this->ext_line) {
for($j = 0; $j $rand_x = rand(2, $this->im_width); $rand_y = rand(2, $this->im_height); $rand_x2 = rand(2, $this->im_width); $rand_y2 = rand(2, $this->im_height); $this->get_randcolor(); イメージライン($this->im, $rand_x, $rand_y, $rand_x2, $rand_y2, $this->randcolor); }
}
}
/**CAPTCHA画像を作成:
* キャンバスを作成する (__construct 関数)
* キャンバスの背景を設定します ($this->set_bgcolor();)
* ランダムな文字列を取得します ($this->get_randnum ();)
* 画像にテキストを書き込む (imagestring 関数)
* 干渉点/干渉線を追加します ($this->set_ext_line(); $this->set_ext_pixel();)
*出力画像
**/
関数作成 () {
$this->set_bgcolor(); $this->get_randnum (); for($i = 0; $i len; $i++){
$font = ランド(4,6); $x = $i/$this->len * $this->im_width + rand(1, $this->len); $this->get_y(); $this->get_randcolor();       imagestring($this->im, $font, $x, $this->y, substr($this->randnum, $i ,1), $this->randcolor);
  }
      $this->set_ext_line();
      $this->set_ext_pixel();
   header("content-type:image/png");
   imagepng($this->im);
   imagedestroy($this->im);     //释放图像资源
 }

}//end class
/**使用验证码类的方法:
 * $an = new authnum(验证码长度,图片宽度,图片高度);
 * 实例化时不带参数则默认是四位的60*25尺寸的常规验证码图片
 * 表单页面检测验证码的方法,对比 $_session[an] 是否等于 $_post[验证码文本框id]
 * 可选配置:
 *  1.验证码类型:$an->ext_num_type=1;  值为1是小写类型,2是大写类型,3是数字类型
 *  2.干扰点:$an->ext_pixel = false;   值为false表示不添加干扰点
 *  3.干扰线:$an->ext_line = false;    值为false表示不添加干扰线
 *  4.y轴随机:$an->ext_rand_y = false; 值为false表示不支持图片y轴随机
 *  5.图片背景:改变 $red $green $blue 三个成员变量的值即可
**/
$an = new authnum();
$an->ext_num_type='';
$an->ext_pixel = true; //干扰点
$an->ext_line  = false; //干扰线
$an->ext_rand_y= true; //y轴随机
$an->green = 238;
$an->create();
?>

好下面来看一款验证码调用实例

例子demo:

以下为引用的内容:




hi.baidu.com/ji_haiyang












デモ1の例:

session_start();
$test = $_post['test'];
$test = トリム($test);
$submit = $_post['submit'];
if($test==$_session['vcode']){
echo 'true、入力された確認コードは正しいです';
} その他 {
echo 'false、入力された確認コードが間違っています';
}

?>

ファイル vcode.php を呼び出します: 以下は引用された内容です:
/**
* デフォルトの検証コード セッションは vcode です: $_session['vcode'];
* 変数の値を代入する際は、変数名とセッションが競合しないように注意してください
*注意: 検証中に大文字と小文字は区別されません
*/
include("inc_vcode_class.php");
$v = 新しい vcode;
//$config['width'] = 50 //検証コードの幅
; //$config['height'] = 20 //検証コードが高いです
; //$config['vcode'] = "vcode" //検証コードをチェックするときに使用されるセッション
; //$config['type'] = "default"; //検証コードの表示タイプ デフォルト: 大文字、文字列: 小文字、整数: 数字 php プログラマ ステーション
//$config['length'] = 4 //検証コードの長さ
; //$config['interfere']= 10; //干渉線の強度、範囲は 1 ~ 30、0 または空は干渉線が無効であることを意味します
//$v->init($config); //設定
$v->create();
?>

検証コードクラス inc_vcode_class.php: www~phperz~com 以下は引用内容です:
/**
*認証コードカテゴリ
* 注: gd ライブラリのサポートが必要です
*/
session_start();
クラスvコード{
プライベート $config;
プライベート$im;
プライベート $str;

関数__construct(){
$this->config['width'] = 50;
$this->config['高さ'] = 20;
$this->config['vcode'] = "vcode";
$this->config['type'] = "デフォルト";
$this->config['length'] = 4;
$this->config['interfere'] = 10;

$this->str['default'] = "abcdefghijklmnopqrstuvwxyz";
$this->str['string'] = "abcdefghijklmnopqrstuvwxyz";
$this->str['int'] = "0123456789";
}

//構成
パブリック関数 init($config=array()){
if (!empty($config) && is_array($config)){
foreach($config as $key=>$value){
$this->config[$key] = $value;
}
}
}

//確認コードを出力する
パブリック関数 create(){
if (!function_exists("imagecreate")){
false を返します;
}
$this->create_do();
}

//作成
プライベート関数 create_do(){
$this->im = imagecreate($this->config['width'],$this->config['height']); PHP プログラマーのホーム
//背景を白に設定します
imagecolorallocate($this->im, 255, 255, 255);

//この背景に枠線を追加します
$bordercolor= imagecolorallocate($this->im,37,37,37);
imagerectangle($this->im,0,0,$this->config['width']-1,$this->config['height']-1,$bordercolor);

//確認コードを生成する
$this->create_str();
$vcode = $_session[$this->config['vcode']];

//テキストを入力してください
$fontcolor = imagecolorallocate($this->im,46,46,46);
for($i=0;$iconfig['length'];$i++){
画像文字列($this->im,5,$i*10+6,rand(2,5),$vcode[$i],$fontcolor);
}

//干渉線を追加
$interfere = $this->config['interfere'];
$interfere = $interfere>30?"30":$interfere php プログラマーの Web サイト
; if (!empty($interfere) && $interfere>1){
for($i=1;$i $linecolor = imagecolorallocate($this->im,rand(0,255),rand(0,255),rand(0,255));
$x = rand(1,$this->config['width']);
$y = rand(1,$this->config['height']);
$x2 = ランド($x-10,$x+10);
$y2 = ランド($y-10,$y+10);
imageline($this->im,$x,$y,$x2,$y2,$linecolor);
}
}

header("pragma:no-cachern");
header("キャッシュコントロール:no-cachern");
header("有効期限:0rn");
header("コンテンツタイプ:画像/jpegrn");
imagejpeg($this->im);
imagedestroy($this->im);
出る
}

//確認コードを取得します
プライベート関数 create_str(){
if ($this->config['type']=="int"){
for($i=1;$iconfig['length'];$i++){
$vcode .= rand(0,9);
}
$_session[$this->config['vcode']] = $vcode;
true を返します;
}
$len = strlen($this->str[$this->config['type']]);
if (!$len){
$this->config['type'] = "デフォルト";
$this->create_str();
}
for($i=1;$iconfig['length'];$i++){
$offset = rand(0,$len-1);
$vcode .= substr($this->str[$this->config['type']],$offset,1);
}
$_session[$this->config['vcode']] = $vcode; true を返します;
}
}

http://www.bkjia.com/PHPjc/632999.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632999.html技術記事ここには 2 つの検証コード生成プログラムがあります。最初のプログラムはより優れており、2 番目のプログラムもまた優れたものです。また、第 2 世代のプログラムは、検証コードの呼び出しと生成を説明するために 2 つの検証コードがあります。 ...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。