>  기사  >  백엔드 개발  >  PHP에서 인증 코드를 생성하는 방법

PHP에서 인증 코드를 생성하는 방법

WBOY
WBOY원래의
2016-07-28 08:26:111240검색

인증 코드 생성 원리는 매우 간단합니다. "그리기"라는 단어 하나만 있으면 됩니다. 예, 우리가 그려야 하는 인증 코드에는 배경, 숫자 또는 문자가 있습니다.

효과는 다음과 같습니다.
 PHP如何生成验证码

단계는 다음과 같습니다.
1. 랜덤 인증코드 받기
문자열을 반환하는 getCode 함수(맞춤형)를 사용하세요.

2. 이미지 리소스를 생성하고

<code><span>$m</span> = imagecreatetruecolor(<span>$width</span>,<span>$height</span>);</code>

imagecolorallocate를 할당하여 실제로 색상을 가져옵니다.

3. 그림 그리기 시작

1) 이미지의 왼쪽 상단 모서리에 있는 시작 영역을 배경색

<code>imagefill(<span>$m</span>,<span>0</span>,<span>0</span>,<span>$bg</span>);</code>
으로 채웁니다. 2) 색상이 지정된 사각형을 추가합니다

. 이미지직사각형

3) 간섭점과 간섭선을 추가합니다

4) 획득한 인증코드 문자열을 이미지에 그립니다

4. 1).브라우저에 직접 출력

//이 함수가 실행되기 전에는 출력이나 공백이 있을 수 없습니다
//응답 헤더가 설정되지 않은 경우 페이지에 인증 코드 이미지 대신 잘못된 문자가 표시됩니다.
header(“Content-type:image/png”); //응답 헤더 정보 설정
imagepng($m);

2) 파일로 출력

5. imagedestroy($m);
<code>imagepng(<span>$m</span>,<span>'test.png'</span>);
</code>

코드는 다음과 같습니다.

').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i

').text(i)); }; $numbering.fadeIn(1700); }); });
<code><span>/**
 * @param int $num  验证码的个数,默认为4
 * @param int $type 验证码的类型,0:纯数字,1:数字+小写字母 2:数字+大小写字母
 * @param bool $outFile 验证码是否输出到文件中
 * @return array 以数组形式返回验证码和验证码图片名字
 */</span>
function drawIdentifyCode(<span>$num</span>=<span>4</span>,<span>$type</span>=<span>0</span>,<span>$outFile</span> = true)
{
    <span>//绘制验证码</span><span>$code</span> = getCode(<span>$num</span>,<span>$type</span>);<span>//获取验证码</span><span>$width</span> = <span>$num</span><span>*35</span>;
    <span>$height</span> = <span>40</span>;
<span>//1.创建一个画图像资源、分配颜色</span><span>$m</span> = imagecreatetruecolor(<span>$width</span>,<span>$height</span>);
    <span>$c</span> = array(imagecolorallocate(<span>$m</span>,<span>rand</span>(<span>0</span>,<span>255</span>),<span>rand</span>(<span>0</span>,<span>255</span>),<span>rand</span>(<span>0</span>,<span>255</span>)),
        imagecolorallocate(<span>$m</span>,<span>rand</span>(<span>0</span>,<span>255</span>),<span>rand</span>(<span>0</span>,<span>255</span>),<span>rand</span>(<span>0</span>,<span>255</span>)),
        imagecolorallocate(<span>$m</span>,<span>rand</span>(<span>0</span>,<span>255</span>),<span>rand</span>(<span>0</span>,<span>255</span>),<span>rand</span>(<span>0</span>,<span>255</span>)),
        imagecolorallocate(<span>$m</span>,<span>rand</span>(<span>0</span>,<span>255</span>),<span>rand</span>(<span>0</span>,<span>255</span>),<span>rand</span>(<span>0</span>,<span>255</span>)));
    <span>$bg</span> = imagecolorallocate(<span>$m</span>,<span>220</span>,<span>220</span>,<span>220</span>); <span>//背景颜色</span><span>//2.开始绘画</span><span>//在image图像左上角处开始区域填充</span>
    imagefill(<span>$m</span>,<span>0</span>,<span>0</span>,<span>$bg</span>);
<span>//添加一个有颜色的矩形框</span>
    imagerectangle(<span>$m</span>,<span>0</span>,<span>0</span>,<span>$width</span>-<span>1</span>,<span>39</span>,<span>$c</span>[<span>0</span>]);
<span>//添加干扰点</span><span>for</span>(<span>$i</span>=<span>0</span>;<span>$i</span><<span>400</span>;<span>$i</span>++)
        imagesetpixel(<span>$m</span>,<span>rand</span>(<span>0</span>,<span>$width</span>),<span>rand</span>(<span>0</span>,<span>30</span>),<span>$c</span>[<span>$i</span><span>%4</span>]);
<span>//添加干扰线</span><span>for</span>(<span>$i</span>=<span>0</span>;<span>$i</span><<span>5</span>;<span>$i</span>++)
        imageline(<span>$m</span>,<span>rand</span>(<span>0</span>,<span>$width</span>),<span>rand</span>(<span>0</span>,<span>30</span>),<span>rand</span>(<span>0</span>,<span>$width</span>),<span>rand</span>(<span>0</span>,<span>30</span>),<span>$c</span>[<span>$i</span><span>%4</span>]);
<span>//绘制验证码内容(一个一个字符绘制)</span><span>for</span>(<span>$i</span>=<span>0</span>;<span>$i</span><<span>$num</span>;<span>$i</span>++)
        imagettftext(<span>$m</span>,<span>28</span>,<span>rand</span>(-<span>50</span>,<span>50</span>),<span>15</span>+(<span>28</span><span>*$</span>i),<span>30</span>,<span>$c</span>[<span>$i</span><span>%4</span>],<span>"consola.ttf"</span>,<span>$code</span>[<span>$i</span>]);
<span>//3.输出图像</span><span>$fileName</span> = null;
    <span>if</span>(!<span>$outFile</span>)
    {
        <span>//注意此函数执行前不能有输出,空格也不行</span><span>//如果没有设置响应头,则页面会出现乱码,而不是一张验证码的图像</span>
        header(<span>"Content-type:image/png"</span>); <span>//设置响应头信息</span>
        imagepng(<span>$m</span>);
    }
    <span>else</span>
    {
        <span>$fileName</span> = time().<span>'.png'</span>;
        imagepng(<span>$m</span>,<span>$fileName</span>);
    }

<span>//4.销毁图片</span>
    imagedestroy(<span>$m</span>);
    <span>return</span> array(<span>$code</span>,<span>$fileName</span>);
}

<span>/**
 * @function 随机生成一个验证码的函数
 * @param $m: 验证码的个数(默认为4)
 * @param $type:验证码的类型:0:纯数字,1:数字+小写字母 2:数字+大小写字母
 * @return 返回字符串形式的验证码 
 */</span>
function getCode(<span>$m</span>=<span>4</span>,<span>$type</span>=<span>0</span>)
{
    <span>$str</span> = <span>"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"</span>;
    <span>$t</span> = array(<span>9</span>,<span>35</span>,strlen(<span>$str</span>)-<span>1</span>); <span>//验证码类型</span><span>//随机生成验证码所需内容</span><span>$c</span> = <span>""</span>;
    <span>for</span>(<span>$i</span>=<span>0</span>;<span>$i</span><<span>$m</span>;<span>$i</span>++)
        <span>$c</span>.=<span>$str</span>[<span>rand</span>(<span>0</span>,<span>$t</span>[<span>$type</span>])];
    <span>return</span><span>$c</span>;
}</code>
위 내용은 PHP가 인증 코드를 생성하는 방법을 관련 내용과 함께 소개하고 있습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되길 바랍니다.

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