защита

  • Автор темы барбос
  • Дата начала
Б

барбос

Гость
Всем салют. Подскажите пожалуйста, как сделать чтобы регистрация проходила только в том случае, если, пароль будет начинаться с большой буквы, а остальные маленькие?
 

drew

Пользователь
php.su тебе в руки, а так задай условие и в условии пропиши проверку на первую букву или же делай ucfirst пусть само задается.
 

Wertos

Пользователь
барбос, ну вот так можно например, правда немного не по твоему запросу
PHP:
//
// Check pass
//
function validate_pass($pass)
{
  global $lang;
 
  if(!preg_match("~(?=[-_a-zA-Z0-9]*?[A-Z])(?=[-_a-zA-Z0-9]*?[a-z])(?=[-_a-zA-Z0-9]*?[0-9])[-_a-zA-Z0-9]{".PASS_MIN_LENGTH.",}~si", $pass))
  {
    return array('error' => true, 'error_msg' => $lang['PASS_INVALID']);
  }
  $pass = trim($pass);
  $len = mb_strlen($pass);
  $chars='1234567890qwertyuiopasdfghjklzxcvbn mQWERTYUIOPASDFGHJKLZXCVBNM';
 
  if(($len < PASS_MIN_LENGTH) || ($len > PASS_MAX_LENGTH)) return array('error' => true, 'error_msg' => $lang['PASS_INVALID']);
  if(strpos($chars, $pass) !== false) return array('error' => true, 'error_msg' => $lang['PASS_INVALID']);
  if($len/2 == round($len/2)) {
      $p1 = mb_substr($pass ,0,$len/2);
      $p2 = mb_substr($pass,$len/2);
      $p22 = '';
      for($i = mb_strlen($p2)-1; $i>=0; $i--)
          $p22 .= $p2[$i];
      if($p1 == $p2 and mb_strpos($chars, $p1) and mb_strpos($chars, $p2)) return array('error' => true, 'error_msg' => $lang['PASS_INVALID']);
      if($p1 == $p22 and mb_strpos($chars, $p1) and mb_strpos($chars, $p2)) return array('error' => true, 'error_msg' => $lang['PASS_INVALID']);
  }
  $chars = array();
  for($i=0; $i<$len; $i++)
  {
      if(isset($chars[$pass[$i]]))
          $chars[$pass[$i]]++;
      else
          $chars[$pass[$i]] = 1;
  }
  // Считаем процент уникальности символов
  $k = sizeof($chars) / $len * 100;
  if($k < PASS_PERCENT_UNIQ) return array('error' => true, 'error_msg' => $lang['PASS_INVALID']);
  return array('error' => false, 'error_msg' => '');
}

PHP:
define('PASS_MAX_LENGTH',  32);
define('PASS_MIN_LENGTH',  6);
define('PASS_PERCENT_UNIQ',  46);

строка должна содержать не менее 6 букв, цифр, подчеркиваний и тире.
Строка должна содержать хотя бы одну заглавную букву, строчную и цифру.

Пароли которые функция считает плохими:
1. Длинна < 6 символов
2. Последовательность символов как на клавиатуре (123456, qwerty)
3. Повторные комбинации последовательности символов (werwer, 12341234)
4. "Отражённые" последовательности символов (123321, qweewq)
5. Процент уникальности символов меньше 46 (wwwfff, 000000)
 
Сверху