>  기사  >  백엔드 개발  >  임의의 코드를 생성하는 PHP용 코드 조각

임의의 코드를 생성하는 PHP용 코드 조각

WBOY
WBOY원래의
2016-07-25 09:07:141250검색
  1. /*

  2. * 설명: 무작위 코드를 생성하고 무작위 코드를 그래픽으로 표시합니다.
  3. */

  4. $ViewRandomCode = mt_rand(1000,10000);

  5. session_start();

  6. $_SESSION[' checksum'] = $ViewRandomCode;

  7. function set_4pixel($r, $g, $b, $x, $y)

  8. {
  9. global $sx, $sy , $pixels;

  10. $ofs = 3 * ($sx * $y $x);

  11. $pixels[$ofs] = chr($r);
  12. $pixels[$ofs 1] = chr($g);
  13. $pixels[$ofs 2] = chr($b);
  14. $pixels[$ofs 3] = chr($r);
  15. $pixels[$ofs 4] = chr($g);
  16. $pixels[$ofs 5] = chr($b);
  17. $ofs = 3 * $sx;
  18. $pixels[$ ofs] = chr($r);
  19. $pixels[$ofs 1] = chr($g);
  20. $pixels[$ofs 2] = chr($b);
  21. $pixels[$ ofs 3] = chr($r);
  22. $pixels[$ofs 4] = chr($g);
  23. $pixels[$ofs 5] = chr($b);
  24. }
  25. //生成数字图象的函数
  26. function draw2digits($x, $y, $number)
  27. {
  28. draw_digit($x, $y, (int) ($number / 10));
  29. draw_digit($x 11, $y, $number % 10);
  30. }

  31. function draw_digit($x, $y, $digit)

  32. {
  33. 글로벌 $sx, $sy, $pixels, $digits, $lines;

  34. $digit = $digits[$digit];

  35. $m = 8;
  36. for ($b = 1, $i = 0; $i < 7; $i , $b *= 2)
  37. {
  38. if (($b & $digit) == $b) {
  39. $j = $i * 4;
  40. $x0 = $lines [$j] * $m $x;
  41. $y0 = $lines[$j 1] * $m $y;
  42. $x1 = $lines[$j 2] * $m $x;
  43. $y1 = $lines[$j 3] * $m $y;
  44. if ($x0 == $x1) {
  45. $ofs = 3 * ($sx * $y0 $x0);
  46. for ($h = $y0; $h $pixels[$ofs] = chr(0);
  47. $pixels[ $ofs 1] = chr(0);
  48. $pixels[$ofs 2] = chr(0);
  49. }
  50. } else {
  51. $ofs = 3 * ($sx * $y0 $x0);
  52. for ($w = $x0; $w <= $x1; $w ) {
  53. $pixels[$ofs ] = chr(0);
  54. $pixels[$ofs ] = chr(0);
  55. $pixels[$ofs ] = chr(0);
  56. }
  57. }
  58. }
  59. }
  60. }

  61. //将文字加入到图象中

  62. 함수 add_chunk($type)
  63. {
  64. global $result, $data, $chunk, $crc_table;

  65. // 청크 :为层

  66. // 길이: 4 字节: 用来计算 청크
  67. // 청크 유형: 4 字节
  68. // 청크 데이터: 길이 바이트
  69. / / CRC: 4 字节: 循环冗余码校验

  70. // 데이터 복사 및 CRC 체크섬 생성

  71. $len = strlen($data);
  72. $chunk = pack(“c*”, ($len >> 24) & 255,
  73. ($len >> 16) & 255,
  74. ($len >> 8) & 255,
  75. $len & 255);
  76. $chunk .= $type;
  77. $chunk .= $data;

  78. // 계산 바이트 청크[4..len-1]

  79. $z = 16777215;
  80. $z |= 255 << 24;
  81. $c = $z;
  82. for ($n = 4; $n < strlen($chunk); $n ) {
  83. $c8 = ($c >> 8) & 0xffffff;
  84. $c = $crc_table[($c ^ ord($chunk[$n])) & 0xff] ^ $c8;
  85. }
  86. $crc = $c ^ $z;< ;/p>
  87. $chunk .= chr(($crc >> 24) & 255);

  88. $chunk .= chr(($crc >> 16) & 255 );
  89. $chunk .= chr(($crc >> 8) & 255);
  90. $chunk .= chr($crc & 255);

  91. $result .= $chunk;
  92. }

  93. //主程序

  94. < p>$sx = 55;
  95. $sy = 21;
  96. $pixels = rand(100,99990)%2?”qwer”:”";

  97. / / 填充

  98. for ($h = 0; $h {
  99. for ($w = 0; $w {
  100. $r = 100 / $sx * $w 155;
  101. $g = 100 / $sy * $h 155;
  102. $b = 255 – (100 / ($sx $sy) * ($ w $h));
  103. $pixels .= chr($r);
  104. $pixels .= chr($g);
  105. $pixels .= chr($b);
  106. }
  107. }

  108. $checknum = isset($ViewRandomCode)?$ViewRandomCode:1234;

  109. $h = (int)($checknum/100);
  110. $m = (int)($checknum 0);
  111. $digits = 배열(95, 5, 118, 117, 45, 121, 123, 69, 127, 125);
  112. $lines = 배열(1, 1, 1, 2, 0, 1, 0, 2, 1, 0, 1, 1, 0, 0, 0, 1, 0, 2, 1, 2, 0, 1, 1, 1, 0, 0, 1, 0);

  113. draw2digits(4, 2, $h);

  114. draw2digits(30, 2, $m);

  115. < p>// set_4pixel(0, 0, 0, 26, 7);
  116. // set_4pixel(0, 0, 0, 26, 13);

  117. // 创建循环冗余码校验表

  118. $z = -306674912; // = 0xedb88320
  119. for ($n = 0; $n < 256; $n ) {
  120. $c = $n;
  121. for ($k = 0; $k < 8; $ k ) {
  122. $c2 = ($c >> 1) & 0×7fffffff;
  123. if ($c & 1) $c = $z ^ ($c2); else $c = $c2;
  124. }
  125. $crc_table[$n] = $c;
  126. }
  127. // PNG 파일 서명

  128. $result = pack(“c*”, 137,80,78,71,13,10,26,10);
  129. // IHDR 청크 데이터:

  130. // 너비: 4바이트
  131. // 높이: 4바이트
  132. // 비트 심도: 1바이트(RGB 값당 8비트)
  133. // 색상 유형: 1바이트(2 = RGB)
  134. // 압축 방식: 1바이트(0 = 수축/팽창)
  135. // 필터 방식: 1바이트(0 = 적응형 필터링)
  136. // 인터레이스 방법: 1바이트(0 = 인터레이스 없음)
  137. $data = pack(“c*”, ($sx >> 24) & 255,
  138. ($sx >> 16 ) & 255,
  139. ($sx >> 8) & 255,
  140. $sx & 255,
  141. ($sy >> 24) & 255,
  142. ($sy > > 16) & 255,
  143. ($sy >> 8) & 255,
  144. $sy & 255,
  145. 8,
  146. 2,
  147. 0,
  148. 0,
  149. 0);
  150. add_chunk(“IHDR”);

  151. // 以下不敢乱翻译,请自行参考

  152. // 스캔라인:
  153. / / 필터 바이트: 0 = 없음
  154. // 라인의 RGB 바이트
  155. // 스캔라인은 "zlib"로 압축됩니다. 방법 8(RFC-1950):
  156. // 압축 방법/플래그 코드: 1바이트($78 = 메소드 8, 32k 창)
  157. // 추가 플래그/검사 비트: 1바이트($01: FCHECK = 1, FDICT = 0, FLEVEL = 0)
  158. // 압축 데이터 블록: n바이트
  159. // 한 블록(RFC-1951):
  160. // 비트 0: BFINAL: 마지막 블록의 경우 1
  161. // 비트 1 및 2: BTYPE: 비압축의 경우 0
  162. // 다음 2바이트: LEN(LSB 우선)
  163. // 다음 2바이트: LEN의 1의 보수
  164. // LEN 바이트 비압축 데이터
  165. // 검사 값: 4바이트(압축되지 않은 데이터의 Adler-32 체크섬)
  166. //
  167. $len = ($sx * 3 1) * $sy;
  168. $data = pack(“c*”, 0×78, 0×01,
  169. 1,
  170. $len & 255,
  171. ($len >> 8) & 255,
  172. 255 – ($len & 255),
  173. 255 – (($len >> 8) & 255));
  174. $start = strlen($data);
  175. $i2 = 0;
  176. for ($h = 0; $h $data .= chr(0);
  177. for ($w = 0; $w < $sx * 3; $w ) {
  178. $data .= $pixels[$i2 ];
  179. }
  180. }

  181. // 계산 data[start..len-1]

  182. $s1 = 1;
  183. $s2 = 0;
  184. for ($n = $start; $n < strlen($data) 바이트의 Adler32 체크섬 ); $n ) {
  185. $s1 = ($s1 ord($data[$n])) % 65521;
  186. $s2 = ($s2 $s1) % 65521;
  187. }
  188. $adler = ($s2

    $data .= chr(($adler >> 24) & 255);

  189. $data .= chr(($adler >> 16) & 255);
  190. $data .= chr(($adler >> 8) & 255);
  191. $data .= chr($adler & 255);
  192. add_chunk(“IDAT ”);

  193. // IEND: PNG 파일의 끝을 표시

  194. $data = “”;
  195. add_chunk(“IEND”);
  196. // 列印图象

  197. echo($result);

  198. ?>

复제대码


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