시스템 개발 과정에서 기본적으로 모든 시스템에는 로그인 모듈이 포함됩니다. 인증 코드 기능은 이에 없어서는 안될 부분이며 시스템 폭발을 방지하는 효과적인 방법입니다. 악마는 길만큼 높다는 속담처럼 요즘에는 인증코드가 점점 더 복잡해지고 고급화되고 있습니다. 이 도움말에서는 간단한 영숫자 인증 코드를 자세히 설명합니다.
Code
<?php /********************************************************************************* * InitPHP 3.8.2 国产PHP开发框架 扩展类库-验证码 *------------------------------------------------------------------------------- * 版权所有: CopyRight By initphp.com * 您可以自由使用该源码,但是在使用过程中,请保留作者信息。尊重他人劳动成果就是尊重自己 *------------------------------------------------------------------------------- * Author:zhuli Dtime:2014-11-25 ***********************************************************************************/ class Code { private $charset = "abcdefghjklmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789"; //随机因子 private $code; //验证码文字 private $codelen = 4; //验证码显示几个文字 private $width = 100; //验证码宽度 private $height = 40; //验证码高度 private $img; //验证码资源句柄 private $font; //指定的字体 private $fontsize = 20; //指定的字体大小 private $fontcolor; //字体颜色 随机 //构造类 编写字体 public function __construct() { $this->font = '/outputs/font/font.ttf'; } //创建4个随机码 private function createCode() { $_leng = strlen($this->charset) - 1; for ($i = 1; $i <= $this->codelen; $i++) { $this->code .= $this->charset[mt_rand(0, $_leng)]; } // session_start(); // $_SESSION['VerifyCode'] = strtolower($this->code); Session::set('VerifyCode', strtolower($this->code)); return $this->code; } //创建背景 private function createBg() { //创建画布 给一个资源jubing $this->img = imagecreatetruecolor($this->width, $this->height); //背景颜色 $color = imagecolorallocate($this->img, mt_rand(157, 255), mt_rand(157, 255), mt_rand(157, 255)); //画出一个矩形 imagefilledrectangle($this->img, 0, $this->height, $this->width, 0, $color); } //创建字体 private function createFont() { $_x = ($this->width / $this->codelen); //字体长度 for ($i = 0; $i < $this->codelen; $i++) { //文字颜色 $color = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156)); //资源句柄 字体大小 倾斜度 字体长度 字体高度 字体颜色 字体 具体文本 imagettftext($this->img, $this->fontsize, mt_rand(-30, 30), $_x * $i + mt_rand(1, 5), $this->height / 1.4, $color, $this->font, $this->code[$i]); } } //随机线条 private function createLine() { //随机线条 for ($i = 0; $i < 6; $i++) { $color = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156)); imageline($this->img, mt_rand(0, $this->width), mt_rand(0, $this->height), mt_rand(0, $this->width), mt_rand(0, $this->height), $color); } //随机雪花 for ($i = 0; $i < 45; $i++) { $color = imagecolorallocate($this->img, mt_rand(220, 255), mt_rand(220, 255), mt_rand(220, 255)); imagestring($this->img, mt_rand(1, 5), mt_rand(0, $this->width), mt_rand(0, $this->height), '*', $color); } } //输出背景 private function outPut() { //生成标头 header('Content-type:image/png'); //输出图片 imagepng($this->img); //销毁结果集 imagedestroy($this->img); } //对外输出 public function doimg() { //加载背景 $this->createBg(); //加载文件 $this->createCode(); //加载线条 $this->createLine(); //加载字体 $this->createFont(); //加载背景 $this->outPut(); } //获取验证码 public function getCode() { return strtolower($this->code); } //验证验证码 public function checkCode($code, $clear = false) { // session_start(); if (Session::get('VerifyCode') == strtolower($code)) { if($clear) $this->clearCode(); return true; } if($clear) $this->clearCode(); return false; } //清除验证码 public function clearCode() { Session::del('VerifyCode'); // session_start(); // unset ($_SESSION['VerifyCode']); } }
ob_clean(); $verify = new Code(); $verify->doimg();
이렇게 하면 다음과 같은 인증코드가 출력될 수 있습니다
매개변수를 조정하여 인증코드의 크기, 간섭 항목 등을 조절할 수 있습니다.
다음으로는 확장 기능과 인증코드의 간섭 항목을 강화하는 방법, 로그인 인증을 위한 프로젝트에 통합하는 방법에 대해 소개하겠습니다.
1. 간섭 강화
우선 위 스크린샷에서 몇 줄을 볼 수 있습니다. 외부인이 분석 도구를 사용하여 디코딩하는 경우, 이때 우리의 인증 코드를 해결하는 것은 매우 간단합니다. 줄을 추가하려면 코드에서 다음 코드를 찾아서 수정하세요
//随机线条 private function createLine() { //随机线条 for ($i = 0; $i < 6; $i++) { $color = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156)); imageline($this->img, mt_rand(0, $this->width), mt_rand(0, $this->height), mt_rand(0, $this->width), mt_rand(0, $this->height), $color); } //随机雪花 for ($i = 0; $i < 45; $i++) { $color = imagecolorallocate($this->img, mt_rand(220, 255), mt_rand(220, 255), mt_rand(220, 255)); imagestring($this->img, mt_rand(1, 5), mt_rand(0, $this->width), mt_rand(0, $this->height), '*', $color); } }
위의 6번은 천천히 조정한 후 만족할 때까지 효과를 확인하시면 됩니다. 동시에 인증 코드에 눈꽃 효과가 많이 있음을 알 수 있습니다. 이 역시 간섭 항목이므로 위의 숫자 45를 수정하여 만족스러운 결과를 얻을 수 있습니다.
참고: 코드의 $charset 변수는 확인을 위해 여기에서 문자를 무작위로 선택합니다. 소문자 i와 L의 효과를 구별하기 어렵기 때문에 i 문자를 제거했습니다.
2. 프로젝트 확인에 액세스
다음 코드를 사용하여 새 파일을 만듭니다.
로그인 후 복사
그런 다음 이 인터페이스를 기존 시스템 로그인 페이지에 도입하여 사용자가 확인 코드를 입력하고 제출하면 서버가 이를 수행합니다. 다음 인증
//验证验证码 public function checkCode($code, $clear = false) { if (Session::get('VerifyCode') == strtolower($code)) { if($clear) $this->clearCode(); return true; } if($clear) $this->clearCode(); return false; } //清除验证码 public function clearCode() { Session::del('VerifyCode'); }
이 시점에서 인증코드 생성 및 인증 과정이 완료되었습니다.
위 내용은 PHP는 그래픽 인증 코드를 생성합니다(강화된 간섭 유형).의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!