> 백엔드 개발 > PHP 튜토리얼 > PHP 인증 코드 생성--메모

PHP 인증 코드 생성--메모

巴扎黑
풀어 주다: 2016-11-29 09:38:18
원래의
1334명이 탐색했습니다.

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

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

<?php

session_start();//保存生成值,以与用户输入比较

//-------------------------------------------------------------------------

$img_w       = 80;// 设置图片宽

$img_h       = 20;// 设置图片高

$pixel_num   = 200;//点越多干扰越大

$is_set_line = true;// 启用干扰线

$pixel_mode  = 2;// 干扰点模式,1,同色;2,杂色

//-------------------------------------------------------------------------

// 随机数产生器

function make_seed()

{

    list($usec, $sec) = explode(&#39; &#39;, microtime());

    return (float) $sec + ((float) $usec * 100000);

}

mt_srand(make_seed());//4.2.0以下版本适用

$authnum = mt_rand(100, 99999);

// 加入session

$_SESSION[&#39;verifycode&#39;]=$authnum;

//echo $authnum;

//生成验证码图片

Header("Content-type: image/PNG");

$im = imagecreatetruecolor($img_w, $img_h);

$bg_color = ImageColorAllocate($im, mt_rand(250,255),mt_rand(250,255),mt_rand(250,255));

// 绘制背景

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

$total_width = 0;

$word_info = array();

// 循环,获取文字信息

$word_length = strlen($authnum);

for($ii=0; $ii<$word_length; $ii++)

{

    $word_space = mt_rand(1,5);

    $font = rand(3,5);

    mt_rand(1,9)%2 == 0?$top = 1:$top = 3;

    $word_info[$ii][&#39;char&#39;]   = substr($authnum,$ii,1);

    $word_info[$ii][&#39;font&#39;]   = $font;

    $word_info[$ii][&#39;offset&#39;] = $top;

    if($ii == 0)

    {

        $word_info[$ii][&#39;width&#39;] = 0;

    }

    $word_info[$ii][&#39;width&#39;]  = imageFontWidth($font)+$word_space;

    $word_info[$ii][&#39;height&#39;] = imageFontHeight($font);

    $word_info[$ii][&#39;color&#39;]  = imageColorAllocate($im, mt_rand(0,50),mt_rand(0,150),mt_rand(0,200));

    // 文字总宽度

    $total_width += $word_info[$ii][&#39;width&#39;];

    // 取第一个字体的高度

    if($ii == 0)

    {

        $total_height = imagefontHeight($font);

    }

}

// 计算偏移

$offset_x = floor(($img_w - $total_width)/2);

$offset_y = floor(($img_h - $total_height)/2);

// 填充验证码

$wid = 0;

$i = 0;

foreach($word_info as $key=>$val)

{

    if($i>0)

    {

        $wid += $val[&#39;width&#39;];

    }

    imagestring($im, $val[&#39;font&#39;], $offset_x + $wid, $val[&#39;offset&#39;] + $offset_y, $val[&#39;char&#39;], $val[&#39;color&#39;]);

    $i++;

}

switch($pixel_mode)

{

    case 1:

        $pixel_color  = ImageColorAllocate($im,

                                        mt_rand(50,255),

                                        mt_rand(50,255),

                                        mt_rand(50,255));

        // 干扰象素

        for($i=0;$i<$pixel_num;$i++)

        {

            imagesetpixel($im, mt_rand()%$img_w , mt_rand()%$img_h , $pixel_color);

        }

        break;

    case &#39;2&#39;:

        // 干扰象素

for ($i=0;$i<=128;$i++)

{

$pixel_color = imagecolorallocate ($im, rand(0,255), rand(0,255), rand(0,255));

imagesetpixel($im,mt_rand(2,128),mt_rand(2,38),$pixel_color);

}

        break;

    default:

        $pixel_color  = ImageColorAllocate($im,

                                        mt_rand(50,255),

                                        mt_rand(50,255),

                                        mt_rand(50,255));

        // 干扰象素

        for($i=0;$i<$pixel_num;$i++)

        {

            imagesetpixel($im, mt_rand()%$img_w , mt_rand()%$img_h , $pixel_color);

        }

        break;

}

ImagePNG($im);

?>

로그인 후 복사

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