PHP класс генератор уникальных логинов.

  1. Что такое логин и для чего нужен.
  2. Основные требования к логину.
  3. Способы получения логина.
  4. Автоматические генераторы логина.
  5. PHP класс генерации уникальных логинов.
  6. PHP класс генерации неповторяющихся логинов №2.
  7. Демонстрация работы генератора логинов.

При регистрациях на сайте как правило возникает необходимость ввода логина пользователя. Логин – это уникальное имя пользователя, которое он выбирает при регистрации на сайте или в системе. Он позволяет пользователю идентифицироваться и получить доступ к своему аккаунту. Логин может быть представлен как строкой символов, так и email-адресом.

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

При регистрации на сайте часто предъявляются требования к логину, например, он должен содержать определенное количество символов, иметь определенную структуру или не содержать нежелательных символов. Также могут быть ограничения на использование уже существующих логинов или email-адресов.

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

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

Достоинством автоматических генераторов логина является уникальность создаваемых имен и отсутствие необходимости пользователя придумывать его самостоятельно. Это может быть удобно для пользователей, которые забывают свои логины или не могут придумать подходящий вариант. Недостатком таких генераторов является то, что созданный логин может оказаться трудно запоминаемым или неудобным для использования.

PHP класс генерации уникальных логинов от AI.

Как обычно задаём вопрос AI GhatGPT:

Нужен php класс для генерации неповторяющихся логинов с задаваемой длиной символов min и max символов основываясь на данных из базы MySql в таблице `registrat` графа `login`. Желательно чтобы логин был похож на передаваемый в класс email адрес, но без домена за @ включительно.

 Ответ AI GhatGPT: Конечно, вот пример класса на PHP, который генерирует неповторяющиеся логины в соответствии с вашими требованиями:

PHP
class LoginGenerator {
    private $mysqli;
    private $minLength;
    private $maxLength;

    public function __construct($mysqli, $minLength = 6, $maxLength = 12) {
        $this->mysqli = $mysqli;
        $this->minLength = $minLength;
        $this->maxLength = $maxLength;
    }

    public function generateLogin($email) {
        $login = strtok($email, '@'); // обрезаем email до знака @
        $login = preg_replace("/[^a-zA-Z0-9]/", "", $login); // удаляем все символы кроме букв и цифр
        $login = substr($login, 0, $this->maxLength); // обрезаем логин до максимальной длины
        $login = $this->makeUnique($login); // делаем логин уникальным

        return $login;
    }

    private function makeUnique($login){
        $i = 1;
        $originalLogin = $login;

        while ($this->loginExists($login)) {
            $login = $originalLogin . $i++;
        }

        return $login;
    }

    private function loginExists($login){
        $query = "SELECT COUNT(*) FROM registrat WHERE login = ?";
        $statement = $this->mysqli->prepare($query);
        $statement->bind_param("s", $login);
        $statement->execute();
        $statement->bind_result($count);
        $statement->fetch();

        return $count > 0;
    }
}

Вы можете использовать этот класс следующим образом:

PHP
$mysqli = new mysqli("localhost", "username", "password", "database");
$generator = new LoginGenerator($mysqli);

$email = "example@example.com";
$login = $generator->generateLogin($email);
echo $login; // выводит сгенерированный логин

Вы можете настроить минимальную и максимальную длину логина, передав соответствующие значения в конструктор класса LoginGenerator. Например:

PHP
$generator = new LoginGenerator($mysqli, 8, 16);

Это создаст генератор логинов, которые имеют длину от 8 до 16 символов.

Предыдущий код генератора неповторяющихся логинов вполне рабочий, но немного примитивен, хотя такой подход часто встречается при регистрации на сайтах. В двух словах идея такая: берётся регистрационный Email, отрезается доменная часть, идущая за собакой @ включительно. Потом сравнивается есть ли такие записи в базе и если уже есть, то сколько. Потом количество увеличивается на единицу и подставляется в конец искомой записи. Так получается новый уникальный логин, который можно вернуть в форму регистрации для дальнейшего редактирования пользователем. Если записи в базе не существует, то отдаётся как есть.

У данного способа есть один существенный недостаток. Если логин публичен и виден другим пользователям, равно как и ботам, то очень даже возможно вычислить Email просто подставляя собаку и домены популярных почтовых сервисов. Обойти данную проблему можно двумя способами. Можно привязать к регистрационному аккаунту Ник пользователя и сделать его публичным, а логин не публиковать. Это сделать не сложно, но всё же часто логин используют в HTML коде для идентификации сообщений, комментариев на сайте и т.д. Если визуально логин не увидеть, то открыть режим просмотра кода тоже пара пустяков, да и сканеры страниц без труда справятся с этой задачей. Вывод сам напрашивается – нужно изменить логин случайной перестановкой символов, дополнить или обрезать в случае необходимости длину логина и проверить его уникальность, если всё же случиться совпадение с записью в базе, то тогда добавить число совпадений увеличенное на единицу как в первом варианте генератора логинов. Конечно, читаемость запоминаемость логина ухудшиться, но можно для публикаций использовать заданный при регистрации Ник или Имя. В следующем коде генератора уникальных логинов такие функции реализованны.

PHP класс генерации неповторяющихся логинов №2 дополненный.

Запускается генератор аналогично первому варианту. Принцип работы виден в комментариях к коду. 

PHP
class LoginGenerator {
    private $mysqli;
    private $minLength;
    private $maxLength;

    public function __construct($mysqli, $minLength = 6, $maxLength = 12) {
        $this->mysqli = $mysqli;
        $this->minLength = $minLength;
        $this->maxLength = $maxLength;
    }

    public function generateLogin($email) {
        //Создаём строку из случайных символов и обрезаем до максимальной длины
        $permitted_chars = substr(str_shuffle('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), 0, $this->maxLength);
        $login = strtok($email, '@'); // обрезаем email до знака @
        $login = preg_replace("/[^a-zA-Z0-9]/", "", $login); // удаляем все символы кроме букв и цифр
        $login = substr($login, 0, $this->maxLength); // обрезаем логин до максимальной длины
        $login = $this->shuffleString($login);//Преобразуем строку
        $login = str_pad($login, $this->minLength, $permitted_chars, STR_PAD_LEFT);
        $login = $this->makeUnique($login); // делаем логин уникальным
        return $login;
    }
    private function shuffleString($string) {
        $chars = str_split($string);//Делим строку посимвольно
        shuffle($chars);//Перемешиваем массив
        $str = implode('', $chars);//собираем обратно в строку
        $str = ucfirst($str);//Делаем первую букву заглавной
        return $str;
    }
    private function makeUnique($login){
        $i = 1;
        $originalLogin = $login;
        
        while ($this->loginExists($login)){
            $login = $originalLogin . $i++;
        }

        return $login;
    }
    //Функция проверки уникальности логина с записями в базе
    private function loginExists($login){
        $query = "SELECT COUNT(*) FROM registrat WHERE login = ?";
        $statement = $this->mysqli->prepare($query);
        $statement->bind_param("s", $login);
        $statement->execute();
        $statement->bind_result($count);
        $statement->fetch();

        return $count > 0;
    }
}

DEMO

Постскриптум генератор уникальных логиновВ целом, выбор логина – это индивидуальный процесс, который зависит от предпочтений и потребностей каждого пользователя. Существуют различные способы получения логина, и каждый пользователь может выбрать наиболее удобный для себя вариант. Однако, следует помнить, что при выборе логина необходимо учитывать его уникальность и удобство использования.

Дата публикации: 

ТОП 10 случайных публикаций



Сайт разработан студией © WEB-VidST   


Яндекс.Метрика