>  기사  >  백엔드 개발  >  PHP 인증 코드 생성 code_php 기술

PHP 인증 코드 생성 code_php 기술

WBOY
WBOY원래의
2016-05-16 20:04:541643검색

인증코드는 일반적으로 웹사이트 등록이나 로그인이 삽입되지 않도록 하기 위해 사용되지만, 보안을 강화하기 위해 일반적으로 몇 가지 혼합된 인증코드를 생성합니다.

로그인 모듈이나 포럼 관개 모듈을 개발할 때 악의적인 제출을 방지하려면 인증 코드를 사용해야 합니다. 인증 코드는 사람과 기계를 구별하는 수단입니다. 물론 이 방법이 완벽한 것은 아니지만. 결국 어떤 역할을 하게 되겠죠.

인증 코드를 구현하려면 GD 라이브러리의 지원이 필요합니다. GD 라이브러리가 없는 아동용 신발은 실제로 GD 라이브러리를 활성화해야 합니다. 인증코드 기본 이미지 생성, 인증코드 내용 표시, 간섭 요소 추가, 인증코드 출력의 4단계가 필요합니다.

1단계: 인증 코드 기본 이미지 생성

$image = imagecreatetruecolor(100, 30); // 创建一个宽为 100 高为 30 的底图 该底图的背景色 为黑色 是系统定义的 
$bgcolor = imagecolorallocate($image, 255, 255, 255);  // 为上面创建的底图分配 白色的背景颜色 
imagefill($image, 0, 0, $bgcolor); // 填充白色背景色 

2단계: 인증 코드 내용 표시

// 输出验证码内容 
for ($i=0; $i < 4; $i++) { 
  $fontsize = 6; 
  $fontcolor = imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120)); 
  $data = 'qwertyuipkjhgfdsazxcvbnm23456789'; 
  $content = substr($data, rand(0, strlen($data)), 1); 
  $x = ($i*100/4) + rand(5,9);  
  $y = rand(5,10); 
  imagestring($image, $fontsize, $x, $y, $content, $fontcolor); //在图像上水平输出一行字符串 
} 

3단계: 방해 요소 추가

// 增加干扰点元素 
for ($i=0; $i < 300; $i++) { 
  $pointcolor = imagecolorallocate($image, rand(50,200), rand(50,200), rand(50,200)); 
  imagesetpixel($image, rand(0,99), rand(0,29), $pointcolor); 
} //开源软件:phpfensi.com 
// 增加干扰线元素  线 和 点 的颜色一定要控制好 要比验证码数字的颜色浅 避免出现验证码数字看不见的现象 
for ($i=0; $i < 4; $i++) { 
  $linecolor = imagecolorallocate($image, rand(100,240), rand(100,240), rand(100,240)); 
  imageline($image, rand(0,99), rand(0,29), rand(0,99), rand(0,29), $linecolor); 
} 

4단계: 인증 코드 입력

// 输出创建的图像  在输出图像之前 必须输出头信息 用来规定输出的图像类型 
header("Content-Type: image/png"); 
imagepng($image); 
// 销毁图像 
imagedestroy($image); 

이번에는 간단한 인증코드가 구현되었습니다. 인증코드 구현에 대한 주의사항은 댓글에 적어두었습니다. 인증코드 사용시 일반적으로 인증을 위해 세션을 사용하여 저장해야 하므로, 여기서는 자세히 설명하지 마세요.

위 내용은 PHP 인증 코드 생성 코드입니다. 댓글 내용을 주의 깊게 읽어보시면 매우 중요한 내용을 얻으실 수 있을 것입니다.

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