目錄
谈谈那些年PHP中屌屌的验证码,PHP屌屌验证码
对于PHP中验证码的问题
php中生成图片验证码问题
首頁 php教程 php手册 谈谈那些年PHP中屌屌的验证码,PHP屌屌验证码

谈谈那些年PHP中屌屌的验证码,PHP屌屌验证码

Jun 13, 2016 am 09:22 AM
php

谈谈那些年PHP中屌屌的验证码,PHP屌屌验证码

  验证码已经是现在网站中非常基础的知识点了,验证码的存在可以防止恶意破解密码、刷票、灌水,可以有效的防止暴力破解特定用户。

  现在就来了解了解那些年PHP中屌屌的验证码吧。

  首先,以四位验证码为例(多位验证码一样的道理)。

  目前网站大多仍然采用静态图片验证码,因为这样实现起来简单又方便,不需要过硬的功底,当然这也是基础。而其原理也就是通过PHP的画图功能将文字画成图片返回到页面。因此,我们解决的问题也就只有三步而已:

  当然,PHP默认是没有开启绘图功能的,因此,在php.ini的配置文件中先开启绘图功能吧:搜到  ;extension=php_gd2.dll  将前面的分号去掉即可。(记得保存喔!)

  那根据第一点,大家首先应该会想到数字的验证码,因为这容易,随机生成个几个数字,然后拼起来也就行了,像酱紫!

1 $validateCode = ''; 2 for ($i = 0; $i $i ++) { 3 $validateCode .= rand(0, 9); 4 } 5 echo $validateCode; View Code

  然后仔细想想,现在的网站验证码都有字母,可这玩意儿都没字母,怎么呢?然后又想到,直接把上面那玩意儿搞成十六进制就好了。

1 $validateCode = ''; 2 for ($i = 0; $i $i ++) { 3 $validateCode .= dechex(rand(0, 16)); 4 } 5 echo $validateCode; View Code

  好像有点自作聪明的赶脚呀,不过想想,也算是有几个字母了,可却只有a,b,c,d,e,f,那要是需要所有字母咋办呢?哈哈,在想想也就想到把所有的字母和数字等在一个字符串中列出来,然后通过随机下标的形式去
随机获取对应的值,也就成了这样:

1 $validateCode = ''; 2 $str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'; 3 for ($i = 0; $i $i ++) { 4 $validateCode .= $str[rand(0, strlen($str))]; 5 } 6 echo $validateCode; View Code

  哈哈,终于像验证码里的随机数了,不过看到下面的方法,有总瞬间被秒的赶脚呀:

<span>echo</span> <span>substr</span>(<span>str_shuffle</span>('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'), 0, 4);
登入後複製

  str_shuffle方法将字符串内容打乱,substr($str, 0, 4)取到了前四个数。这样是完全没有问题的!不过细心的看的出来,这样的验证码里的内容是不会重复的。

  以上验证码也就产生了,接下来也就要将验证码用PHP画出来了。

1 $validateCode = substr(str_shuffle('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'), 0, 4); 2 3 // 创建一张宽为110px,高为25px的图片 4 $img = imagecreatetruecolor(110, 25); 5 // 将图片的背景颜色设置成黑色,颜色值分别对应RGB 6 $bgcolor = imagecolorallocate($img, 0, 0, 0); 7 8 // 创建白色 9 $white = imagecolorallocate($img, 255, 255, 255); 10 11 // 添加文字在图片中,第二个参数为文字的大小,只能在1~5,第三个参数为x坐标,第4个参数为y坐标,第5个参数为文字的内容,第6个参数为文字的颜色 12 imagestring($img, rand(3, 5), rand(0, 80), rand(2, 10), $validateCode, $white); 13 14 // 添加文字在图片中,第二个参数为文字的大小,只能在1~5,第三个参数为x坐标,第4个参数为y坐标,第5个参数为文字的内容,第6个参数为文字的颜色 15 imagestring($img, rand(3, 5), rand(0, 80), rand(2, 10), $validateCode, $white); View Code

  

  当然,这样的话验证码就太好识别了,就只是单纯的黑底白字,为了增加点难度,我们就多加几条线叠加在验证码的上面。

1 $validateCode = substr(str_shuffle('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'), 0, 4); 2 3 // 创建一张宽为110px,高为25px的图片 4 $img = imagecreatetruecolor(110, 25); 5 // 将图片的背景颜色设置成黑色,颜色值分别对应RGB 6 $bgcolor = imagecolorallocate($img, 0, 0, 0); 7 // imagefill($img, 10, 10, $bgcolor); 8 9 // 创建白色 10 $white = imagecolorallocate($img, 255, 255, 255); 11 12 for ($i = 0; $i < 30; $i ++) { 13 // 在图片上画线,其中第2个参数表示线的x起始坐标,第3个参数表示线的y起始坐标,第4个参数表示x的终止坐标,第5个参数表示y的终止坐标,第6个参数表示颜色,此处生成一个随机颜色 14 imageline($img, rand(0, 110), rand(0, 50), rand(0, 110), rand(0, 50), imagecolorallocate($img, rand(0, 255), rand(0, 255), rand(0, 255))); 15 } 16 17 // 添加文字在图片中,第二个参数为文字的大小,只能在1~5,第三个参数为x坐标,第4个参数为y坐标,第5个参数为文字的内容,第6个参数为文字的颜色 18 imagestring($img, rand(3, 5), rand(0, 80), rand(2, 10), $validateCode, $white); 19 20 // 返回成图片 21 header('Content-type: image/png'); 22 imagepng($img); View Code

  结果也就成了这样,当然,要想实现验证码,这样还是不够滴,需要通过将验证码生成的随机数存到服务器的session中,$_SESSION['validate'] = $validateCode;然后在通过客户端输入的验证码与之对比即可。PHP中屌屌的验证码也就这样实现了,当然,前面也说过了,这是最基础的代码,可以通过你的想法将其改变为实现算术的验证码,中文的验证码,或其它一些有趣的验证码,以减少其枯燥性又实现安全性。

 

  大家有没有什么其它屌屌的验证码分享与我呢?

 

对于PHP中验证码的问题

那是因为,php.ini 中的register_global = off;
修改成on就可以了,不过在php5后默认是将其设置为off,
因为直接获值并不安全,想想如果用户知道你的session的名字
那他是不是可以通过get,或post方法修改你的session呢?
因为获值是只要名字就行了!
php5一般使用超全局变量!
$_GET
$_POST
$_COOKIE
$_SESSION

另楼主的书好像有点老了,session_register在php5中已经不推荐使用了,现在可以直接赋值了$_SESSION['yzm'] = 100;

注:听说php6已出来了!
 

php中生成图片验证码问题

找到原因了:$rand变量没有初始化,直接输出时会有警告。解决办法是在for语句之前加上$rand='';这样就没问题了。
session_start();
$rand='';
for($i=0;$i $rand.=dechex(rand(0,15));
}
$_SISSION['rand']=$rand;

$bg=imagecreatetruecolor(100,30);
$im=imagecolorallocate($bg,0,0,0);
$color=imagecolorallocate($bg,255,255,255);
imagestring($bg,5,0,0,$rand,$color);

header("Content-type: image/jpeg");
imagejpeg($bg);
 

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南

CakePHP 專案配置 CakePHP 專案配置 Sep 10, 2024 pm 05:25 PM

CakePHP 專案配置

CakePHP 日期和時間 CakePHP 日期和時間 Sep 10, 2024 pm 05:27 PM

CakePHP 日期和時間

CakePHP 檔案上傳 CakePHP 檔案上傳 Sep 10, 2024 pm 05:27 PM

CakePHP 檔案上傳

CakePHP 路由 CakePHP 路由 Sep 10, 2024 pm 05:25 PM

CakePHP 路由

討論 CakePHP 討論 CakePHP Sep 10, 2024 pm 05:28 PM

討論 CakePHP

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發

CakePHP 快速指南 CakePHP 快速指南 Sep 10, 2024 pm 05:27 PM

CakePHP 快速指南

See all articles