PHPで認証コードを書く方法


PHP検証コード小項目:
<?php 
header('Content-type:image/jpeg');
$img=imagecreatetruecolor(120,40);//    
$element=array('a','b','c','d','e','f','g','h','i','j','k');//       ,    
$string='';//    ,             
for($i=0;$i<5;$i++){
$string.=$element[rand(0,count($element)-1)];
}//         , $element     5 ,  5     
$color1=imagecolorallocate($img,rand(200,250),rand(200,250),rand(200,250));//           
$color2=imagecolorallocate($img,rand(150,200),rand(150,200),rand(150,200));//              
imagefill($img,0,0,$color1);//       
for($i=0;$i<100;$i++){
imagesetpixel($img,rand(0,120),rand(0,40),$color2);
}//      100 ,         100    
for($i=0;$i<3;$i++){
    imageline($img,rand(0,120/2),rand(0,40),rand(60,120),rand(0,40),$color2);
}//    3 ,         3   
imagettftext($img,25,rand(-5,5),rand(5,15),rand(30,35),$color2,'font/Fudgie.ttf',$string);
//       ,    ,  ,  ,  
imagejpeg($img);//    JPEG  
imagedestroy($img);//      
?>

ステップ1:imagecreatetruecolorを使用して画像を作成し、imagefillで画像の位置決めと色の割り当てを行います.
ステップ2:imagecolloallocateを使用して新しく作成した画像にランダムに色を割り当てて変数$color 1を読み込み、さらに$color 1をimagefillという関数に戻します.
ステップ3:imagecolloallocateで新しく作成した画像にランダムに色を割り当てて変数$color 2を読み込み、$color 2を戻す
imagesetpixelという関数では,imagesetpixelを用いて検証コード上の画素点を設定し,forループを用いて検証コード上で100回ループし,100個のランダム座標画素点を生成する.
手順4:imagelineで検証コード上の線を設定し、forループを利用して検証上3回ループし、3つのランダム座標の線を生成します.線の色は速くimagecolloallocateで3番目の色を作成していません.$color 2を使用しています.実際の項目では、もう一度色を作成する必要があります.
手順5:imagettftextを利用して認証コード上のフォントを作成し、この関数は他のスタイルのフォントを入力することができ、具体的なフォントはネット上でダウンロードすることができ、ダウンロードした後、フォントTTFファイルを現在書いているPHPファイルと同じディレクトリに入れ、imagettftext上でこのTTFファイルのパスを設定すればよい.具体的にPHPマニュアルを見て、次は本人が難点と思っているステップである.検証コードのアルファベットをランダムに変換することです.
手順6:検証コードのアルファベットをランダムに変換するには、まず変数$stringを設定し、そこに配列arrayを書きます.配列の裏面には変換したいランダムなアルファベットが含まれています.私が上で作ったプロジェクト$elementのように、中に書いた配列があります.中にはa-kを含むアルファベットが含まれています.それから、forサイクルを利用して5回循環します.a-kを含むアルファベットをランダムに5回繰り返します.中には2つの注意点があり、1つ目はループを行う前に変数$stringを設定する必要がありますが、$stringは変数であるためループの前に再定義する必要があります.私は当初ここで悩んでいました.前の2つのforループには変数が入っていないので、ここで変数を再定義するのを忘れました.2つ目の注意点はrand(0,count($element)-1)です.なぜ$elementは1を減算するのか、後で各道の大神に聞いてやっとcountという関数が統計配列の個数であることを知った.ここで統計配列a-kの個数は11であるが、randはランダム配列の下付きで、プログラム0から計算され、a-kはaが0からkまで10しか計算できないが、関数$elementの統計個数は11であるため、$elementは1を減算して10になり、randで計算する.
ステップ7:画像作成時のフォーマットを出力します.ここではJPEGとリリースピクチャリソースです.
最后に问题点があって、関系なく重要で、だからも闻いていませんが、もし大神がいたら、やはり大神がいて、大牛たちが教えてくれることを望んでいます:
私が書いたプロジェクトについて$string.=$Element[rand(0,count($element)-1)]変数$stringはコネクタを使用します.5文字をランダムに接続するには、接続子を付けないようにしてみましたが、1文字しかランダムに出せないので、$element[rand(0,count($element)-1)]というプログラムが実行され、1文字しかランダムにできず、変数$stringを返し、接続子を付けて5回ループが終わるまで実行を続け、このように理解が正しいかどうか分かりません.もし大神が見たら、論理を詳しく話してください.弟は感謝しています.