PHP 는 산식 인증 코드 와 한자 인증 코드 인 스 턴 스 를 실현 합 니 다.

PHP 사이트 개발 에서 인증 코드 는 우리 의 양식 이 악의 적 으로 제출 되 지 않도록 효과적으로 보호 할 수 있 습 니 다.그러나 산식 인증 코드 나 한자 인증 코드 를 사용 하지 않 고 간단 한 자모 나 디지털 인증 코드 만 사용 하면 이러한 인증 코드 방안 은 정말 안전 합 니까?
간단 한 숫자 나 알파벳 인증 코드 는 쉽게 풀 리 는 것 을 잘 알 고 있 지만 산식 인증 코드 나 중국어 한자 인증 코드 는 쉽게 풀 리 지 않 기 때문에 인증 코드 를 사용 할 때 산식 인증 코드 나 중국어 한자 인증 코드 를 사용 하 는 것 을 권장 합 니 다.
다음은 제 가 쓴 두 가지 인증 코드 입 니 다.유용 한 친 구 는 참고 하 실 수 있 습 니 다.
1.산식 인증번호:

<?php
session_start();
header("Content-type: image/png");
$num1 = mt_rand(0,9);//
$num2 = mt_rand(1,9);//
$type_str = "+-*";//
$type = substr($type_str,rand(0,2),1);//
$change = mt_rand(1,3);
if($change==1){
 $code = "$num1$type$num2=?";
 $result = "$verifyCode=$num1$type$num2;";
 eval($result);
 $_SESSION['authnum_session'] = $verifyCode; 
}elseif($change==2){
 $result = "$verifyCode=$num1$type$num2;";
 eval($result);
    $code = $num1.$type."_=".$verifyCode;
 $_SESSION['authnum_session'] = $num2; 
}elseif($change==3){
 $result = "$verifyCode=$num1$type$num2;";
 eval($result);
    $code = "_".$type.$num2."=".$verifyCode;
 $_SESSION['authnum_session'] = $num1; 
}
$im = imagecreate(68,28);  
$black = imagecolorallocate($im, 0,0,0);    
$white = imagecolorallocate($im, 255,255,255);
$gray = imagecolorallocate($im, 200,200,200);
$red = imagecolorallocate($im, 255, 0, 0);
imagefill($im,0,0,$white);       
imagestring($im, 5, 10, 8, $code, $black);   
for($i=0;$i<70;$i++) {
 imagesetpixel($im, mt_rand(0, 58) , mt_rand(0, 28) , $black);
 imagesetpixel($im, mt_rand(0, 58) , mt_rand(0, 28) , $red);
 imagesetpixel($im, mt_rand(0, 58) , mt_rand(0, 28) , $gray);
}
imagepng($im);
imagedestroy($im);
?>
2.중국어 한자 인증 코드:

<?php
session_start();
$ch_str=" ";
$len = mb_strlen($ch_str,"utf-8");//
$str = array();
for($i=0;$i<4;$i++){
   $pos = mt_rand(0,$len-5);//
   $str[] = mb_substr($ch_str,$pos,1,"utf-8");
}
$authnum_session = implode("",$str);
$_SESSION['authnum_session'] = $authnum_session;   // session
Header("Content-type: image/PNG");
//
$image_x=100;
$image_y=50;
$im = imagecreate($image_x,$image_y);
//
$bkg = ImageColorAllocate($im,255,255,255);
// , , window 。
$fnt = "simhei.ttf";
//
$white=ImageColorAllocate($im,234,185,95);
// ,
imagearc($im, 150, 8, 20, 20, 75, 170, $white);
imagearc($im, 180, 7,50, 30, 75, 175, $white);
// ,
imageline($im,20,20,180,30,$white);
imageline($im,20,18,170,50,$white);
imageline($im,25,50,80,50,$white);
//
$noise_num=3000;
$line_num=50;
//
$rectangle_color=imagecolorallocate($im,0xAA,0xAA,0xAA);
$noise_color=imagecolorallocate($im,0x00,0x00,0x00);
$font_color=imagecolorallocate($im,0x00,0x00,0x00);
for($i=0;$i<$noise_num;$i++)
{
    // , , 。
    //imagesetpixel($im,mt_rand(0,$image_x),mt_rand(0,$image_y),$noise_color);
}
for($i=0;$i<$line_num;$i++)
{
    $line_color=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
    // ,
    imageline($im,mt_rand(0,$image_x),mt_rand(0,$image_y),mt_rand(0,$image_x),mt_rand(0,$image_y),$line_color);   
}
for ($i=0;$i<4;$i++)
{
    ImageTTFText($im, rand(18,20), rand(0,20), rand(($image_x/4)*$i+$image_x/100,($image_x/4)*$i+$image_x/8), rand($image_y/2+$image_y/10,$image_y/2+$image_y/5), $font_color, $fnt, $str[$i]);

}
ImagePNG($im);
ImageDestroy($im);
?>

글꼴 파일:simhei.rar 여 기 를 클릭 하 십시오본 사이트 다운로드.
주의:
중국어 한자 인증 코드 를 단독으로 실행 한 후 session 를 가 져 오 면 인증 코드 와 session 내용 이 일치 하지 않 음 을 발견 할 수 있 습 니 다.그러나 img 태그 에서 src 속성 에서 이 중국어 한자 인증 코드 파일 을 참조 한 다음 session 을 가 져 옵 니 다.이 때 두 내용 은 일치 합 니 다.
관심 있 는 친 구 는 이것 에 대해 더욱 완벽 하 게 할 수 있다.

좋은 웹페이지 즐겨찾기