PHP 인증 코드 의 실현 원 리 를 전면적으로 해석 하고 php 인증 코드 를 첨부 한 작은 사례
gd 확장 을 시작 해 야 합 니 다.아래 코드 를 사용 하여 gd 확장 여 부 를 확인 할 수 있 습 니 다.
<?php
echo "Hello World!!!!";
echo phpinfo();
?>
그 다음 에 브 라 우 저 에서 Ctrl+F 에서 gd 옵션 을 찾 으 면 자신 이 이 확장 을 설 치 했 는 지 확인 할 수 있 습 니 다.없 으 면 이 확장 을 모두 설치 해 야 합 니 다.배경 그림
imagecreatetruecolor
기본 검은색 배경 생 성
<?php
// gd imagecreatetruecolor();
$image = imagecreatetruecolor(100,30);
//
header('content-type:image/png');
imagepng($image);
// ,
imagedestroy($image);
imagecolorallocate채 움 색 을 만 들 고 imagefill(image,x,y,color)방법 으로 붙 입 니 다.
<?php
// gd imagecreatetruecolor();
$image = imagecreatetruecolor(100,30);
//
$bgcolor = imagecolorallocate($image,255,255,255);
//
imagefill($image,0,0,$bgcolor);
//
header('content-type:image/png');
imagepng($image);
// ,
imagedestroy($image);
imagepng이 방법 을 사용 하기 전에 반드시 헤드 정 보 를 설정 해 야 합 니 다.그렇지 않 으 면 그림 이 제대로 표시 되 지 않 습 니 다.
imagedestory(image)
적절 한 자원 방출 은 서버 요청 에 대한 압력 을 줄 일 수 있 습 니 다.
간이 디지털 인증 코드
imagecolorallocate
색상 정 보 를 생 성하 여 이따가 부여 처리 하기 편리 합 니 다.
$fontcolor=imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255));
imagestring
내용 정 보 를 그림 의 해당 위치 에 쓰다.
imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
식별 방해 증가
//
// , 200
for($i=0;$i<200;$i++){
$pointcolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255));
imagesetpixel($image,rand(0,100),rand(0,30),$pointcolor);
}
//
// 5
for($i=0;$i<5;$i++){
// ,
$linecolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255));
imageline($image,rand(0,99),rand(0,29),rand(0,99),rand(0,29),$linecolor);
}
디지털 자모 혼합 인증번호
<?php
// gd imagecreatetruecolor();
$image = imagecreatetruecolor(100,40);
//
$bgcolor = imagecolorallocate($image,255,255,255);
//
imagefill($image,0,0,$bgcolor);
//////// 4
for($i=0;$i<4;$i++){
$fontsize = rand(6,8);
$fontcolor = imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255));
// ,
$rawstr = 'abcdefghjkmnopqrstuvwxyz23456789ABCDEFGHJKLMNOPQRSTUVWXYZ';
$fontcontent = substr($rawstr,rand(0,strlen($rawstr)),1);
//
$x += 20;
$y = rand(10,20);
imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
}
// , 200
for($i=0;$i<200;$i++){
$pointcolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255));
imagesetpixel($image,rand(0,100),rand(0,30),$pointcolor);
}
// 4
for($i=0;$i<4;$i++){
// ,
$linecolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255));
imageline($image,rand(0,99),rand(0,29),rand(0,99),rand(0,29),$linecolor);
}
header('content-type:image/png');
imagepng($image);
// ,
imagedestroy($image);
인증 코드 사용세 션 시작 시기
메모:세 션 을 시작 하려 면 반드시 시작 하 는 곳 에 있어 야 합 니 다.
검증 의 원리
검증 과정 은 클 라 이언 트 가 입력 한 인증 코드 와 session 필드 에 존재 하 는 인증 코드 를 비교 하 는 것 입 니 다.즉:
if(isset($_REQUEST['checkcode'])){
session_start();
if($_REQUEST['checkcode']==$_SESSION['checkcode']){
echo "<font color='green'>Success!</font>";
}else{
echo "<font color='red'>Failed!</font>";
}
exit();
}
최적화 검증그러나 간단하게 이렇게 검증 하 는 것 은 조금 나 쁜 점 이 있다.바로 자모의 대소 문자 가 틀 리 기 쉽다 는 것 이다.그래서 사용자 가 입력 한 수 치 를 모두 소문 자로 변환 해 야 합 니 다.
if(strtolower($_REQUEST['checkcode'])==$_SESSION['checkcode']){・・・}
작은 사례
인증 코드 생 성
<?php
session_start();// php , session
// gd imagecreatetruecolor();
$image = imagecreatetruecolor(100,40);
//
$bgcolor = imagecolorallocate($image,255,255,255);
//
imagefill($image,0,0,$bgcolor);
//////// 4
$checkcode='';
for($i=0;$i<4;$i++){
$fontsize = rand(6,8);
$fontcolor = imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255));
// ,
$rawstr = 'abcdefghjkmnopqrstuvwxyz23456789';
$fontcontent = substr($rawstr,rand(0,strlen($rawstr)),1);
//
$checkcode.=$fontcontent;
//
$x += 20;
$y = rand(10,20);
imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
}
// session
$_SESSION['checkcode']=$checkcode;
// , 200
for($i=0;$i<200;$i++){
$pointcolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255));
imagesetpixel($image,rand(0,100),rand(0,30),$pointcolor);
}
// 4
for($i=0;$i<4;$i++){
// ,
$linecolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255));
imageline($image,rand(0,99),rand(0,29),rand(0,99),rand(0,29),$linecolor);
}
header('content-type:image/png');
imagepng($image);
// ,
imagedestroy($image);
폼 검증
<?php
header("Content-Type:text/html;charset=utf8");
if(isset($_REQUEST['checkcode'])){
session_start();
if(strtolower($_REQUEST['checkcode'])==$_SESSION['checkcode']){
echo "<font color='green'>Success!</font>";
}else{
echo "<font color='red'>Failed!</font>";
}
exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title> </title>
<script>
function change(){
document.getElementById("image_checkcode").src='./store.php?r='+Math.random();
}
</script>
</head>
<body>
<form action="./form.php" method="post">
<p> :</p><img id="image_checkcode" src="./store.php?r=<?php echo rand();?>" /><a href="javascript:void(0)" onclick="change()"> </a><br/>
<input type="text" name="checkcode" /><br />
<p><input type="submit" value=" " /></p>
</form>
</body>
</html>
총결산마지막 으로 정리 합 시다.
•php 를 사용 하여 인증 코드 를 만 들 려 면 gd 확장 지원 이 필요 합 니 다.
•imagecreatetruecolor 방법 으로 배경 색 을 만 들 고 imagefill 로 imagecoloralocate 에서 발생 하 는 색 을 채 웁 니 다.
•imagestring 을 사용 하여 인증 코드 와 배경 그림 의 결합 을 실현 합 니 다.
•imagesetpixel 을 사용 하여 방해 점 을 추가 합 니 다.
•이미지 라인 을 사용 하여 간섭 선 을 추가 합 니 다.
•session 을 사용 하기 전에 시작 부분 에서 session 을 켜 야 합 니 다.start()방법
•자바 스 크 립 트 를 사용 하여 인증 코드 를 동적 으로 수정 하 는 src 를 사용 하여 사용자 의'바 꾸 기'수 요 를 만족 시 킵 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.