Pengeluaran kod pengesahan untuk pendaftaran pengguna PHP dan sistem log masuk

Analisis kod pengesahan

Menetapkan kod pengesahan pada halaman log masuk dan pendaftaran adalah untuk mengelakkan brute force cracking, berniat jahat pendaftaran, dsb. , ialah kandungan standard tapak web Hari ini, ia telah dibangunkan untuk menghantar kod pengesahan terus ke telefon bimbit atau e-mel pengguna untuk pengesahan Bahagian ini hanya melakukan pengesahan kod pengesahan gambar yang paling mudah pengesahan kod melalui bahagian ini Prinsip


Carta alir ringkas untuk menjana kod pengesahan

生成验证码的流程图.png

Untuk pelaksanaan khusus, lihat kandungan berikut


Jana imej latar belakang kod pengesahan

1 sambungan GD php

Buka fail php.ini, alih keluar ulasan daripada extension=php_gd2.dll, dan dayakannya Jika ia didayakan pada asalnya, tiada perubahan diperlukan

p1.png

Seterusnya, mari buat imej latar belakang putih 60X15

2 Kanvas , sejenis data sumber. Sumber imej yang boleh dimanipulasi.

    Buat kanvas baharu (baharu)
  • ImageCreate(lebar, tinggi), cipta berdasarkan kanvas papan pembetulan warna.
imageCreateTrueColor(lebar, tinggi);

    Buat kanvas berdasarkan imej (terbuka)
  • imageCreateFromJPEG(alamat imej);
imageCreateFromPNG (alamat imej);

imageCreateFromGIF (alamat imej);

Kami mencipta kanvas warna sebenar:

$width=60;

$height=15;//Buat kanvas$img=imageCreateTrueColor($width,$height);


Anda boleh cuba menggunakan var_dump(); tukar $ img output untuk melihat sama ada ia serupa dengan jenis sumber

3. Kendalikan kanvas

Tetapkan warna

: Jika perlu, tetapkan warna pada kanvas Untuk menggunakan warna pada kanvas, anda harus menetapkan warna pada kanvas terlebih dahulu.

Gunakan fungsi:

ID Warna = imageColorAllocate(kanvas, R, G, B); = imageColorAllocate($img,0xff,0xff,0xff);

Isi kanvas: Isi (ganti) titik dengan titik warna yang berturutan dan sama
Gunakan fungsi:
imejIsi(kanvas, isikan kedudukan x, isikan kedudukan Y, pengenalan warna) untuk melengkapkan

Kedudukan diurus menggunakan koordinat:

Asal: 0, 0, sudut kiri atas kanvas.

Di sebelah kanan, paksi-x bertambah, dan ke bawah paksi-Y bertambah.

//Isi warna ke dalam kanvas
imejIsi($img,0,0,$putih);

4. Output kanvas

Output maklumat corak yang diproses dalam kanvas.

Lazim:

  • Output ke fail imej.

  • Output secara langsung.

Gunakan fungsi:

imagePNG(canvas[, file address])://Generate a file at the specified address

imageJPEG(); // Output terus pada halaman web, kod pengesahan kami menggunakan kaedah ini

imageGIF();//Sama seperti yang sebelumnya

Jika tiada parameter kedua, ini bermakna output langsung.

Output terus ke penyemak imbas, anda perlu memberitahu penyemak imbas bahawa jenis data tindak balas mestilah imej format PNG:

Gunakan arahan Content-type

// Output langsung

header('Content-Type:image/jpeg;');

imageJPEG($img);

Nota: Kanvas boleh dikeluarkan beberapa kali dan dalam pelbagai format!

5. Musnahkan sumber kanvas

Gunakan fungsi: imageDestroy();

imageDestroy( $img);



Nilai untuk menjana kod pengesahan

1. Mula-mula kita mesti mentakrifkan semua aksara yang mungkin, dapatkan jumlah panjang semua aksara dan panjang kod pengesahan yang ingin kita hasilkan

Kodnya adalah seperti berikut:

//Jana nilai kod pengesahan
$chars = '1234567890';//Jadi aksara yang mungkin muncul
$chars_len=strlen($chars);
$code_len=4;// Panjang kod pengesahan
$code='';//Inikan rentetan kod pengesahan

2 kali, setiap kali daripada semua aksara yang mungkin Keluarkan nombor dan akhirnya pautkan empat digit bersama-sama untuk menjana nilai kod pengesahan

untuk($i=1;$ i<=$code_len;++$ i){
$rand=mt_rand(0,$chars_len-1);//Pilih mana-mana nombor secara rawak daripada 0-9
$code.=$rand;// Sambungkan nombor yang diambil kepada Bersama
}

3 Buka sesi dan simpan nilai kod pengesahan dalam sesi untuk pengesahan

//Simpan dalam sesi untuk pengesahan------------------------
session_start();
$_SESSION [ ' ver_code']=$code;


Letakkan nilai kod pengesahan ke dalam imej latar belakang kod pengesahan

1. Berikan warna rawak kepada nilai kod pengesahan

//Tetapkan warna rentetan secara rawak
$str_color=imageColorAllocate($img, mt_rand(0,255 ),mt_rand(0,255),mt_rand(0,255));

2 >

//Kira pemusatan rentetan
//Saiz rentetan
$font=5;
//Saiz kanvas
$img_w=imageSX($img);
$img_h=imageSY($img);
//Saiz fon
$font_w=imagefontwidth($font);
$font_h=imagefontheight($font);
//String Saiz
$code_w=$font_w*$code_len;
$code_h=$font_h;
$x=($img_w-$code_w)/2;
$y=($img_h-$code_h )/2;
//Keluarkan kod pengesahan ke kanvas----------------------------
imageString($ img,$font,$x,$y,$code,$str_color);

3. Keluarkan kod pengesahan

//Output langsung
imageJPEG($img);
imageDestroy($img);


Kod lengkap adalah seperti berikut

<?php
//生成验证码背景图---------------------------------
header('Content-Type:image/jpeg;');
//背景图尺寸
$width=60;
$height=15;
//创建画布
$img=imageCreateTrueColor($width,$height);
//分配颜色
$white = imageColorAllocate($img,0xff,0xff,0xff);
//填充颜色到画布
imageFill($img,0,0,$white);
//生成验证码的值----------------------------------
$chars = '1234567890';//所以可能出现的字符
$chars_len=strlen($chars);
$code_len=4;//验证码的长度
$code='';//初始化验证码字符串
for($i=1;$i<=$code_len;++$i){
    $rand=mt_rand(0,$chars_len-1);//随机取0-9中的任意一个数字
    $code.=$rand;//将取出来的数字连接在一起
}
//存入session中,用于验证-------------------------
session_start();
$_SESSION['ver_code']=$code;
//随机分配字符串颜色------------------------------
$str_color=imageColorAllocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
//计算字符串的居中
//字符串大小
$font=5;
//画布尺寸
$img_w=imageSX($img);
$img_h=imageSY($img);
//字体的尺寸
$font_w=imagefontwidth($font);
$font_h=imagefontheight($font);
//字符串的尺寸
$code_w=$font_w*$code_len;
$code_h=$font_h;
$x=($img_w-$code_w)/2;
$y=($img_h-$code_h)/2;
//把验证码输出到画布上----------------------------
imageString($img,$font,$x,$y,$code,$str_color);
//直接输出
imageJPEG($img);
imageDestroy($img);
?>


Meneruskan pembelajaran
||
<?php //生成验证码背景图--------------------------------- header('Content-Type:image/jpeg;'); //背景图尺寸 $width=60; $height=15; //创建画布 $img=imageCreateTrueColor($width,$height); //分配颜色 $white = imageColorAllocate($img,0xff,0xff,0xff); //填充颜色到画布 imageFill($img,0,0,$white); //生成验证码的值---------------------------------- $chars = '1234567890';//所以可能出现的字符 $chars_len=strlen($chars); $code_len=4;//验证码的长度 $code='';//初始化验证码字符串 for($i=1;$i<=$code_len;++$i){ $rand=mt_rand(0,$chars_len-1);//随机取0-9中的任意一个数字 $code.=$rand;//将取出来的数字连接在一起 } //存入session中,用于验证------------------------- session_start(); $_SESSION['ver_code']=$code; //随机分配字符串颜色------------------------------ $str_color=imageColorAllocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); //计算字符串的居中 //字符串大小 $font=5; //画布尺寸 $img_w=imageSX($img); $img_h=imageSY($img); //字体的尺寸 $font_w=imagefontwidth($font); $font_h=imagefontheight($font); //字符串的尺寸 $code_w=$font_w*$code_len; $code_h=$font_h; $x=($img_w-$code_w)/2; $y=($img_h-$code_h)/2; //把验证码输出到画布上---------------------------- imageString($img,$font,$x,$y,$code,$str_color); //直接输出 imageJPEG($img); imageDestroy($img); ?>
  • Cadangan kursus
  • Muat turun perisian kursus