Advertisement
Guest User

Untitled

a guest
Aug 18th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.91 KB | None | 0 0
  1. <?
  2. // ГЕНЕРАЦИЯ КАПЧИ
  3. // названия строчек для сообщения пользователю
  4. $line_titles = array(
  5.     0  => 'первой',
  6.     1  => 'второй',
  7.     2  => 'третьей',
  8.     10 => 'предпоследней',
  9.     11 => 'последней'
  10. );
  11. $message_template = '%d символ в %s строке';
  12.  
  13. $table = array(
  14.     array('ш','б'),
  15.     array('м','н','к'),
  16.     array('ы','м','б','ш'),
  17.     array('б','ы','н','к','м'),
  18.     array('и','н','ш','м','к'),
  19.     array('н','ш','ы','и','к','б'),
  20.     array('ш','и','н','б','к','ы'),
  21.     array('к','н','ш','м','ы','б','и'),
  22.     array('б','к','ш','м','и','ы','н'),
  23.     array('н','к','и','б','м','ш','ы'),
  24.     array('ш','и','н','к','м','и','ы','б'),
  25.     array('и','м','ш','ы','н','б','м','к')
  26. );
  27.  
  28. // четыре случайные строки
  29. $lines = array_rand($table, 4);
  30.  
  31. // массив сообщений о нужных буквах
  32. $messages = array();
  33. // текст, который должен будет ввести пользователь
  34. $captcha_text = '';
  35.  
  36. foreach ($lines as $line) {
  37.     // выбор случайного символа в строке
  38.     $sym = array_rand($table[$line]);
  39.     // название номера строчки
  40.     $line_name = array_key_exists($line, $line_titles) ? $line_titles[$line] : $line + 1;
  41.     $messages[] = sprintf($message_template, $sym + 1, $line_name);
  42.     $captcha_text .= $table[$line][$sym];
  43. }
  44.  
  45. $message = join(', ', $messages);
  46. $_SESSION['captcha'] = $captcha_text;
  47. ?>
  48.  
  49. <?
  50. // ПРОВЕРКА КАПЧИ
  51. $captcha = mb_strtolower(isset($_POST['captcha']) ? $_POST['captcha'] : '');
  52.  
  53. if ($captcha != $_SESSION['captcha']) {
  54.     // обработка ошибки
  55.     // наличие $_SESSION['captcha'], кстати, тоже нужно проверять
  56. }
  57. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement