ホームページ >バックエンド開発 >PHPチュートリアル >PHP画像検証コード生成プログラム code_PHPチュートリアル
ここでは 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