>  기사  >  백엔드 개발  >  一个php验证码生成类代码

一个php验证码生成类代码

WBOY
WBOY원래의
2016-07-25 08:43:23982검색
  1. class ValidationCode
  2. {
  3. //属性
  4. private $width;
  5. private $height;
  6. private $codeNum;
  7. private $image;
  8. private $disturbColorNum; //干扰元素数目
  9. private $checkCode;
  10. function __construct($width=80,$height=20,$codeNum=4)
  11. {
  12. $this->width=$width;
  13. $this->height=$height;
  14. $this->codeNum=$codeNum;
  15. $number=floor($width*$height/15);
  16. if($number>240-$codeNum)
  17. {
  18. $this->disturbColorNum=240-$codeNum;
  19. }else
  20. {
  21. $this->disturbColorNum=$number;
  22. }
  23. $this->checkCode=$this->createCheckcode();
  24. }
  25. function getCheckCode()
  26. {
  27. return $this->checkCode;
  28. }
  29. private function createImage(){
  30. $this->image=imagecreatetruecolor($this->width,$this->height);
  31. $backcolor=imagecolorallocate($this->image,rand(225,255),rand(225,255),rand(255,255));
  32. imagefill($this->image,0,0,$backcolor);
  33. $border=imagecolorallocate($this->image,0,0,0);
  34. imagerectangle($this->image,0,0,$this->width-1,$this->height-1,$border);
  35. }
  36. private function setDisturbColor(){
  37. for($i=0;$idisturbColorNum;$i++){
  38. $color=imagecolorallocate($this->image,rand(0,255),rand(0,255),rand(0,255));
  39. imagesetpixel($this->image,rand(1,$this->width-2),rand(1,$this->height-2),$color);
  40. }
  41. for($i=0;$i {
  42. $color=imagecolorallocate($this->image,rand(0,255),rand(0,255),rand(0,255));
  43. imagearc($this->image,rand(-10,$this->width),rand(-10,$this->height),rand(30,300),rand(20,300),55,44,$color);
  44. }
  45. }
  46. private function outputText($fontFace=""){
  47. for($i=0;$icodeNum;$i++)
  48. {
  49. $fontcolor=imagecolorallocate($this->image,rand(0,128),rand(0,128),rand(0,128));
  50. if($fontFace=="")
  51. {
  52. $fontsize=rand(3,5);
  53. $x=floor($this->width/$this->codeNum)*$i+5;
  54. $y=rand(0,$this->height-15);
  55. imagechar($this->image,$fontsize,$x,$y,$this->checkCode{$i},$fontcolor);
  56. }
  57. else
  58. {
  59. $fontsize=rand(12,16);
  60. $x=floor(($this->width-8)/$this->codeNum)*$i+8;
  61. $y=rand($fontsize,$this->height-8);
  62. imagettftext($this->image,$fontsize,rand(-45,45),$x,$y,$fontcolor,$fontFace,$this->checkCode{$i});
  63. }
  64. }
  65. }
  66. private function createCheckCode(){
  67. $code="23456789abcdefghijkmnpqrstuvwrst";
  68. $str="";
  69. for($i=0;$icodeNum;$i++)
  70. {
  71. $char=$code{rand(0,strlen($code)-1)};
  72. $str.=$char;
  73. }
  74. return $str;
  75. }
  76. private function outputImage()
  77. {
  78. if(imagetypes()&IMG_GIF)
  79. {
  80. header("Content-Type:image/gif");
  81. imagepng($this->image);
  82. }else if(imagetypes()&IMG_JPG)
  83. {
  84. header("Content-Type:image/jpeg");
  85. imagepng($this->image);
  86. }else if(imagetypes()&IMG_PNG)
  87. {
  88. header("Content-Type:image/png");
  89. imagepng($this->image);
  90. }else if(imagetypes()&IMG_WBMP){
  91. header("Content-Type:image/vnd.wap.wbmp");
  92. imagepng($this->image);
  93. }else
  94. {
  95. die("PHP不支持图片验证码");
  96. }
  97. }
  98. //通过该方法向浏览器输出图像
  99. function showImage($fontFace="")
  100. {
  101. //创建图像背景
  102. $this->createImage();
  103. //设置干扰元素
  104. $this->setDisturbColor();
  105. //向图像中随机画出文本
  106. $this->outputText($fontFace);
  107. //输出图像
  108. $this->outputImage();
  109. }
  110. function __destruct()
  111. {
  112. imagedestroy($this->image);
  113. }
  114. }
  115. function checklogin(){
  116. if(empty($_POST['name']))
  117. die( '用户名不能为空');
  118. if(empty($_POST['password']))
  119. die("密码不能为空");
  120. if($_SESSION['code']!=$_POST['vertify'])
  121. die("验证码输入不正确".$_SESSION['code']);
  122. $username=$_POST['name'];
  123. $password=md5($_POST['password']);
  124. //检查是否存在
  125. conndb($username,$password);
  126. }
  127. function conndb($name="",$ps=""){
  128. $conn=mysql_connect('localhost','root','123456');
  129. if(!$conn) die("数据库连接失败".mysql_error());
  130. mysql_select_db('5kan',$conn) or die('选择数据库失败'.mysql_error());
  131. mysql_set_charset('utf8',$conn);
  132. $sql="select id from k_user where username='{$name}' and password='{$ps}'";
  133. $result=mysql_query($sql) or die("SQL语句错误".mysql_error());
  134. if(mysql_num_rows($result)>0) die("登录成功");
  135. else die("用户名或者密码错误");
  136. mysql_close($conn);
  137. }
  138. session_start();
  139. if(!isset($_POST['randnum']))
  140. {
  141. $code=new ValidationCode(120,20,4);
  142. $code->showImage("comicbd.ttf"); //显示在页面
  143. $_SESSION['code']=$code->getCheckCode();//保存在服务器中
  144. }
  145. else
  146. {
  147. checklogin();
  148. }
  149. ?>
复制代码

验证码, php


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.