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
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
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.
- Buat kanvas berdasarkan imej (terbuka)
imageCreateFromJPEG(alamat imej);
$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
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 3. Keluarkan kod pengesahan //Output langsung Kod lengkap adalah seperti berikut
//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);
imageJPEG($img);
imageDestroy($img);<?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);
?>