개발 꿀팁/PHP

php학습 --- php실현 인증코드(1)

Jammie 2022. 6. 29. 14:33
반응형

1. 인증번호 간략 소개
1.인증번호는 전자동존컴퓨터와 인간을 구분하는 튜링 테스트의 약자.사용자가 컴퓨터와 사람인지 구분하는 일종의 공적 전자동 프로그램이다.

2.인증코드 주요적용장경: 로그인, 등록 확정 전, 메시지 게시, 회신 전, 기기 요청 의심 시 사람/기기 체크.

3.실현 단계:

(1) 밑그림 생성

의존php 이미지 처리 라이브러리GD,http://php.net/manual/zh/book.image.php

(2) 검증내용 생성

생산하다난수를 생성하여 php함수 rand(;)를 사용한다.

(3) 인증코드 이미지 생성;

(4)검증 내용 확인

php 조작 SESSION 기반 필요, 서버 측에 검증 내용 저장, 프론트 에이젝스 기반

4.개발 전 준비:

(1) php 운전 환경(저는 라라곤을 씁니다.)

WWW 디렉터리에 새로 만들기폴더 test, 새 test.php 파일

<?php
  
  echo "hello,world!!";

Laragon 시작, 페이지 보기:

(2) PHP가 GD를 지원하는지 확인하고 php파일에 함수 phpinfo( ) 출력을 사용하여 보면 된다.

test1.php에 함수 쓰기

<?php
    phpinfo();

페이지를 새로 고치고, 나타나는 페이지에서 gd를 검색하여 지원 여부를 확인하고, 지원되지 않는 경우 자체 바이두에서 방법을 찾으십시오:

2. php 구현 인증코드 --- 디지털 인증코드
1.새로운 Captcha.php 파일, 다음 코드를 기입한다.인증 코드 그림 구현:

<?php
 
//반드시 맨 위, 다중 서버 측에서 인증 코드 정보를 기록하여 사용자가 입력한 후 검사하기 편리해야 한다
     session_start();
 
    //기본적으로 검은색 사진을 반환합니다.
    $image = imagecreatetruecolor(100, 30);
    //배경을 흰색으로 설정합니다.
    $bgcolor = imagecolorallocate($image, 255, 255, 255);
    //흰색으로 지도를 듬뿍 깔다
    imagefill($image, 0, 0, $bgcolor);
 
    //빈 문자열, 순환마다 문자열 뒤에 추가
    $captch_code='';
 
   //인증 번호는 4자리입니다.
    for ($i=0; $i < 4; $i++) { 
    	$fontsize=6;
    	$fontcolor=imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));
    	
        //무작위 숫자 0-9 생성
    	$fontcontent = rand(0,9);
    	$captch_code.= $fontcontent;
       //숫자의 위치, 0, 0은 왼쪽 상단 모서리입니다.겹쳐서 불완전하게 보일 수 없다
    	$x=($i*100/4)+rand(5,10);
    	$y=rand(5,10);
     	imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
    }
      
 
  
   $_SESSION['authcode'] = $captch_code;
//인증 코드를 위해 간섭 요소를 추가하고, 색상을 조정합니다.,
//포인트   
    for ($i=0; $i < 200; $i++) { 
    	$pointcolor = imagecolorallocate($image,rand(50,200),rand(50,200),rand(50,200));
    	imagesetpixel($image, rand(1,99), rand(1,29), $pointcolor);
    }
 
//인증 코드에 간섭 요소 추가
//실 
    for ($i=0; $i < 3; $i++) { 
    	$linecolor = imagecolorallocate($image,rand(80,220),rand(80,220),rand(80,220));
    	imageline($image, rand(1,99), rand(1,29),rand(1,99), rand(1,29) ,$linecolor);
    }
 
    header('content-type:image/png');
	imagepng($image);
 
    //소각하다
    imagedestroy($image);

보기 효과는 다음과 같습니다. 한번 새로 고치면 내용이 바뀔 수 있습니다.

2.form.php 파일을 새로 만들고 다음 코드를 기입한다.확인:

<?php
 
	if (isset($_REQUEST['authcode'])) {
		session_start();
 
		if (strtolower($_REQUEST['authcode'])==$_SESSION['authcode']) {
			echo'<font color ="#0000CC"> 출력이 정확하다</font>';
			# code...
		}else{
			echo $_REQUEST['authcode'];
			echo $_SESSION['authcode'];
			echo'<font color ="#CC0000"> 출력 오류</font>';
		}
 
		exit();
 
	}
?>
 
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>인증 번호 확인</title>
	</head>
	<body>
		<form method="" ="post" action="./form.php">
			<p>인증 코드 그림:
				<img  id="captcha_img" border="1" src="./captcha.php?r=<?php echo rand(); ?>" alt="" width="100" height="30">
				
				<a href="javascript:void(0)" onclick="document.getElementById('captcha_img').src='./captcha.php?r='+Math.random() ">바꾸다?</a>
			</p>
 
			<p>그림에 내용을 입력하세요:
				<input type="text" name="authcode" value="" />
			</p>
 
			<p>
				<input type="submit" value="提交" style="padding: 6px 20px;">
			</p>
 
		</form>
	</body>
 
</html>

구현결과는 아래와 같으며, 교환을 클릭하면 인증번호가 변경됩니다.

그림 속 내용을 입력, 맞으면 힌트 입력, 틀리면 힌트 입력, 틀리면 힌트 입력 오류.양식은 스스로 수정한다.
3. php 구현 인증코드 --- 숫자 알파벳 인증코드
1.검증코드 이미지 생성, 무작위 숫자만 생성하는 세대코드는 랜덤 숫자 알파벳을 생성하는 코드로 바뀌며, 기타 코드는 2와 일치한다.

//인증 코드는 4글자, 숫자, 문자입니다.
   for ($i=0; $i <4 ; $i++) { 
   	$fontsize=6;
   	$fontcolor=imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));
   	//자전. o와 0, l과 1이 충돌하기 때문에 우리 사전에 혼동하기 쉬운 것은 포함되지 않습니다.
    $data='abcdefghijkmnpqrstuvwxy3456789';
    $fontcontent = substr($data,rand(0,strlen($data)) ,1);
	$captch_code.= $fontcontent;
 
	$x=($i*100/4)+rand(5,10);
	$y=rand(5,10);
 
    imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
   }

효과는 다음과 같습니다.

반응형