首頁 >後端開發 >php教程 >php隨機驗證碼圖片產生實例詳解

php隨機驗證碼圖片產生實例詳解

WBOY
WBOY原創
2016-07-25 08:52:471071瀏覽
  1. /**預設首頁 **/

  2. class DefaultController extends AppController */
  3. class DefaultController extends AppController
  4. {
  5. public
  6. public
  7. function index() {
  8. $len = 5;
  9. $str = "ABCDEFGHIJKLNMPQRSTUVWXYZ123456789";
  10. $im = imagecreatetruecolor ( 70, 20 ); ($im, 255, 255, 255);

  11. $bgtxt = imagecolorallocate($im, 220, 220, 220);
  12. //隨機調色盤

  13. $colors = array(
  14. imagecolorallocate($im, 255, 0, 0),
  15. imagecolorallocate($im, 0, 200, 0),
  16. imagecolorallocate($im, 0, 0, 255),
  17. imagecolorallocate($im, 0, 0, 255),
  18. imagecolorallocate($im, 0, 0, 255),
  19. imagecolorallocate($im, 0, 0, 0),
  20. imagecolorallocate($im, 255, 128, 0),
  21. imagecolorallocate($im, 255, 208, 0),
  22. imcolor" , 98, 186, 245),
  23. );
  24. //填充背景色

  25. imagefill($im, 0, 0, $bgc);
  26. //隨機取得數字

  27. $verify = "";
  28. while (strlen($verify) $i = strlen($verify);
  29. $random = $str[rand(0, strlen($str))];
  30. $verify .= $random;
  31. //繪製背景文字

  32. imagestring($im, 6 , ($i*10) 3, rand(0,6), $random, $bgtxt);
  33. //繪製主文字訊息
  34. imagestring($im, 6, ($i*10) 3, rand(0,6), $random, $colors[rand(0, count($colors)-1)]);
  35. }
  36. //加上隨機雜色

  37. for($i=0; $i$color = imagecolorallocate($im, rand(50,220), rand(50,220), rand(50,220));
  38. imagesetpixel($ im, rand(0,70), rand(0,20), $color);
  39. }
  40. //將驗證碼存入$_SESSION中

  41. sess(" verify", $verify);
  42. //輸出圖片並釋放快取

  43. header('Content-type: image/png');
  44. imagepng($im);
  45. imagedestroy($im);
}
}; ?>
複製程式碼複製程式碼

例2,產生隨機字串和驗證碼的類別的php實例 產生隨機字串和驗證碼的類別。

以下程式碼的實現,主要做到可以很好區分一個get_code(),另一個create_check_image(),輸出映像直接呼叫後面的,session()取驗證碼時直接get_code()就可以。 使用session時必須將session_star()放在最前面。

完整程式碼:

  1. class RandCheckCode

  2. {
  3. /*函數名稱:get_code()
  4. {
  5. /*函數名稱:get_code() *作用:取得隨機字串
  6. * 參數:
  7. 1、(int)$length = 32 #隨機字元長度
  8. 2、(int)$mode = 0 #隨機字元類型,
  9. 0為大小寫英文和數字,1為數字,2為小寫字母,3為大寫字母,
  10. 4為大小寫字母,5為大寫字母和數字,6為小寫字母和數字
  11. *返回:取得的字串
  12. */
  13. function get_code($length=32,$mode=0)//取得隨機驗證碼函數
  14. {
  15. switch ($mode)
  16. {
  17. case '1':
  18. $str='123456789';
  19. break;
  20. case '2':
  21. $str='abcdefghijklmnopqrstuvwxyz';
  22. break='abcdefghijklmnopqrstuvwxyz';
  23. break; $str='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  24. break;
  25. case '4':
  26. $str='ABCDEFGHIJKLMNOPQRSTUVWaseXYZabcdefijklmnopr; $str='ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
  27. break;
  28. case '6':
  29. $str='abcdefghijklmnopqrstuvwxyz1234567break90'abcdefghijklmnopqrstuvwxyz1234567break90'n; KLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890';
  30. break;
  31. }
  32. $checkstr='';
  33. $len=strlen($str)-1;
  34. for ($i=0;$i {
  35. //$num=rand(0,$len);//產生一個0到$len之間的隨機數
  36. $num=mt_rand(0,$len);//產生一個0到$len之間的隨機數
  37. $checkstr.=$str[$num];
  38. }
  39. return $checkstr;
  40. }
  41. /**函數名稱:create_check_image()

  42. 函數作用:產生一個校驗碼的圖片
  43. 參考 數:$checkcode:校驗碼字串
  44. 返 回 值:傳回該圖片
  45. */
  46. function create_check_image($checkcode)//產生一個
  47. {
  48. $im=imagecreate(65,22);//產生一個圖片
  49. $black=imagecolorallocate($im,0,0,0);//背景顏色
  50. $white=imagecolorallocate($im,255,255,255);//前景顏色
  51. $gray=imagecolorallocate ($im,200,200,200);
  52. imagefill($im,30,30,$gray);//在$im影像的座標30,30(影像左上角為0,0)處以$gray 顏色執行區域填入(即與30,30點顏色相同且相鄰的點都會被填入)
  53. imagestring($im,5,8,3,$checkcode,$white);//用$white顏色將字串$checkcode畫到$im 所代表的圖像的8,3座標處(這是字串左上角座標,整幅圖像的左上角為0,0),5是字體大小, 字體只能是1,2,3,4或5,使用內建字型

  54. for ($i=0;$i {
  55. $randcolor=imagecolorallocate($im,rand( 0,255),rand(0,255),rand(0,255));
  56. imagesetpixel($im,rand()p,rand()0,$randcolor);//在$im圖像上用$randcolor顏色在( rand()p,rand()0)座標(圖左上角為0,0)上畫一點
  57. }
  58. header("Content-type:image/png");
  59. imagepng($ im);//以PNG格式將圖片輸出到瀏覽器或檔案
  60. imagedestroy($im);//銷毀圖片$im
  61. }
  62. }
  63. /*
  64. $randcode= new RandCheckCode();
  65. $checkstring=$randcode->get_code(5,7);
  66. $image=$randcode->create_check_image($checkstring);
  67. echo $image;
  68. */🎜>*/
  69. ?>
  70. 複製程式碼
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn