> 백엔드 개발 > PHP 튜토리얼 > PHP에서 인증 코드를 구현하는 방법

PHP에서 인증 코드를 구현하는 방법

WBOY
풀어 주다: 2023-05-20 11:34:02
원래의
6011명이 탐색했습니다.

인터넷이 지속적으로 발전함에 따라 보안을 보장하기 위해 인증 코드를 사용해야 하는 웹사이트가 점점 더 많아지고 있습니다. 인증 코드는 인간의 능력에 의존하며 컴퓨터로 해독할 수 없는 인증 기술로 웹사이트 등록, 로그인, 비밀번호 검색 및 기타 기능에 널리 사용됩니다. 다음은 PHP를 사용하여 인증코드 기능을 구현하는 방법을 소개합니다.

1. 인증코드 이미지 생성

인증코드 이미지 생성은 인증코드 기능의 핵심이며, 이를 사용자에게 표시할 이미지로 렌더링해야 합니다. PHP에서는 GD 라이브러리를 사용하여 이미지를 생성할 수 있습니다.

GD 라이브러리는 이미지 생성, 이미지 수정, 이미지 저장 등 다양한 기능을 제공하는 PHP 확장입니다. 인증코드 이미지는 GD 라이브러리를 통해 쉽게 생성할 수 있습니다.

인증 코드를 생성하는 단계는 다음과 같습니다.

  1. 이미지 크기, 색상 및 기타 속성 설정
  2. 임의 문자열 생성
  3. 문자열을 이미지에 렌더링
  4. 간섭선, 간섭점 등 추가

다음은 구체적인 코드 구현입니다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

<?php

//设置图片大小,这里是120x40

$image_width = 120;

$image_height = 40;

 

//创建画布

$image = imagecreatetruecolor($image_width, $image_height);

 

//设置背景色为白色

$bg_color = imagecolorallocate($image, 255, 255, 255);

imagefill($image, 0, 0, $bg_color);

 

//生成随机字符串

$code = "";

$charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

$charset_length = strlen($charset);

 

for ($i = 0; $i < 4; $i++) {

    $rand_index = rand(0, $charset_length - 1);

    $rand_char = substr($charset, $rand_index, 1);

    $code .= $rand_char;

}

 

//将字符串渲染到图像中

$font_size = 20;

$font_color = imagecolorallocate($image, 0, 0, 0);

 

$x = 10;

$y = ($image_height - $font_size) / 2;

for ($i = 0; $i < 4; $i++) {

    $char = substr($code, $i, 1);

    imagettftext($image, $font_size, rand(-10, 10), $x, $y, $font_color, "arial.ttf", $char);

    $x += $font_size + rand(-5, 5);

}

 

//添加干扰线、干扰点等

for ($i = 0; $i < 6; $i++) {

    $line_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));

    imageline($image, rand(0, $image_width), rand(0, $image_height), rand(0, $image_width), rand(0, $image_height), $line_color);

}

 

for ($i = 0; $i < 50; $i++) {

    $point_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));

    imagesetpixel($image, rand(0, $image_width), rand(0, $image_height), $point_color);

}

 

//输出图像

header("Content-type:image/png");

imagepng($image);

 

//销毁图像

imagedestroy($image);

?>

로그인 후 복사

위 코드는 임의의 인증 코드 이미지를 생성하여 브라우저에 표시합니다. 그 중 Arial 글꼴, 검정색 텍스트, 흰색 배경, 6개의 간섭선 및 50개의 간섭점이 사용됩니다. 필요에 따라 사용자 정의할 수 있습니다.

2. 인증코드 확인

인증코드 이미지를 생성한 후, 사용자가 입력한 인증코드와 생성된 인증코드를 비교하여 사용자가 올바른 인증코드를 입력했는지 확인해야 합니다. PHP에서는 생성된 확인 코드 문자열을 후속 확인을 위해 세션에 저장할 수 있습니다.

구체적인 단계는 다음과 같습니다.

  1. 생성된 인증코드 문자열을 세션에 저장합니다.
  2. 사용자가 인증코드를 입력합니다.
  3. 사용자가 입력한 인증코드가 세션에 저장된 인증코드와 동일한지 확인합니다. session

코드 구현은 다음과 같습니다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

<?php

//生成验证码

session_start();

$code = "";

$charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

$charset_length = strlen($charset);

 

for ($i = 0; $i < 4; $i++) {

    $rand_index = rand(0, $charset_length - 1);

    $rand_char = substr($charset, $rand_index, 1);

    $code .= $rand_char;

}

 

$_SESSION["captcha"] = $code;

 

//展示验证码图片

$image_width = 120;

$image_height = 40;

$image = imagecreatetruecolor($image_width, $image_height);

$bg_color = imagecolorallocate($image, 255, 255, 255);

imagefill($image, 0, 0, $bg_color);

 

$font_size = 20;

$font_color = imagecolorallocate($image, 0, 0, 0);

 

$x = 10;

$y = ($image_height - $font_size) / 2;

for ($i = 0; $i < 4; $i++) {

    $char = substr($code, $i, 1);

    imagettftext($image, $font_size, rand(-10, 10), $x, $y, $font_color, "arial.ttf", $char);

    $x += $font_size + rand(-5, 5);

}

 

header("Content-type:image/png");

imagepng($image);

imagedestroy($image);

 

//校验验证码

session_start();

if (isset($_POST["captcha"])) {

    $user_input = $_POST["captcha"];

    if (strcasecmp($user_input, $_SESSION["captcha"]) != 0) {

        echo "验证码错误";

    } else {

        echo "验证码正确";

    }

}

?>

로그인 후 복사

위 코드에서 세션은 생성된 인증코드 문자열을 저장하는 데 사용되며, 입력된 인증코드와 세션에 저장된 인증코드를 비교합니다. 그 중 strcasecmp 함수는 두 문자열을 대소문자 구분 없이 비교하는 함수로, 같으면 0을, 다르면 0이 아닌 값을 반환한다.

요약

PHP를 통해 인증코드 기능을 구현하면 웹사이트의 보안을 효과적으로 확보할 수 있습니다. 인증코드 이미지 생성 시, GD 라이브러리를 활용하여 다양한 색상과 폰트의 인증코드 이미지를 쉽게 생성할 수 있으며, 간섭선, 간섭점 등을 추가하여 보안성을 높일 수 있습니다. 인증코드 검증 시, 생성된 인증코드 문자열은 후속 비교를 위해 세션에 저장되어야 합니다.

위 내용은 PHP에서 인증 코드를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿