---
title: "Метод генерации пароля пользователя Joomla 5 с учётом настроек com_users - WebTolk"
description: "Метод для генерации пароля в Joomla с учетом настроек компонента com_users. Также ссылка на gist в GitHub. Метод бывает нужен при разработке плагинов авторегистрации пользователей."
url: "https://web-tolk.ru/blog/metod-generatsii-parolya-polzovatelya-joomla-5-s-uchjotom-nastroek-com-users"
date: "2024-12-02T09:42:24+00:00"
language: "ru-RU"
---

# Метод генерации пароля пользователя Joomla 5 с учётом настроек com_users

 Автор: Сергей Толкачев Создано: 02 декабря 2024 Обновлено: 01 сентября 2025 Просмотров: 890    ![](https://web-tolk.ru/blog/images/blog/metod-generatsii-parolya-polzovatelya-joomla-5-s-uchjotom-nastroek-com-users/header.webp)

Метод для генерации пароля в Joomla с учетом настроек компонента `com_users`. Также ссылка на [gist в GitHub](https://gist.github.com/sergeytolkachyov/1170d2371b5a815187a2602da697fadc). Метод бывает нужен при разработке плагинов авторегистрации пользователей.

```
<?php
use Joomla\CMS\Component\ComponentHelper;

/**
	 * Method to generate password.
	 *
	 * @return string Generated password.
	 *
	 * @since  1.0.0
	 */
	public static function generatePassword(): string
	{

		$comUsersParams = ComponentHelper::getParams('com_users');
		// Минимальная длина. В Joomla по умолчанию минимальная длина - 8.
		$minimumLength = $comUsersParams->get('minimum_length', 8);
		// Минимальное количество цифр
		$minimumIntegers = $comUsersParams->get('minimum_integers', 4);
		// Минимальное количество символов
		$minimumSymbols = $comUsersParams->get('minimum_symbols', 0);
		// Минимальное количество букв в верхнем регистре
		$minimumUppercase = $comUsersParams->get('minimum_uppercase', 0);
		// Минимальное количество букв в нижнем регистре
		$minimumLowercase = $comUsersParams->get('minimum_lowercase', 0);

		// Словари
		$integers      = ['1', '2', '3', '4', '5', '6', '7', '8', '9'];
		$countIntegers = count($integers);

		$symbols      = ['~', '!', '#', '$', '%', '^', '&', '*', '(', ')', '-',
			'_', '.', ',', '<', '>', '?', '{', '}', '[',
			']', '|', ':', ';'];
		$countSymbols = count($symbols);

		$lettersUppercase      = ['A', 'B', 'C', 'D', 'E', 'F', 'G',
			'H', 'J', 'K', 'M', 'N', 'P', 'Q', 'R',
			'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
		$countlettersUppercase = count($lettersUppercase);

		$lettersLowercase      = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k',
			'm', 'n', 'p', 'q', 'r', 's', 't', 'u', 'v',
			'w', 'x', 'y', 'z'];
		$countLettersLowercase = count($lettersLowercase);

		// Массивы
		$passwordLowercase = [];
		$passwordIntegers  = [];
		$passwordSymbols   = [];
		$passwordUppercase = [];

		// Считаем длину пароля.
		$passwordLenght = $minimumIntegers + $minimumSymbols + $minimumUppercase + $minimumLowercase;
		$passwordLenght = ($passwordLenght < $minimumLength) ? $minimumLength : $passwordLenght;

		// Комбинации
		// основа пароля - нижний регистр и цифры. Остальное до кучи, поэтому если указаны символы и верхний регистр,
		// то вычитаем их количество из общей длины.  Везде, блин, могут оказаться нули...
		//
		// ПОВЕДЕНИЕ ПО УМОЛЧАНИЮ
		// По умолчанию все пустые значения. Буквы в нижнем регистре и цифры используем обязательно.
		if (empty($minimumIntegers) && empty($minimumSymbols) && empty($minimumUppercase) && empty($minimumLowercase))
		{
			// Пополам, если не указано.
			$minimumIntegers  = ceil($passwordLenght / 2); // Если общее количество - нечётное число
			$minimumLowercase = $passwordLenght - $minimumIntegers;
		}
		else
		{
			/**
			 * Представим различные комбинации 4-х параметров, где часть - нули,
			 * а часть - указаны. Мы должны зарезервировать "место" в пароле
			 * под обязательные количества, а остальное поделить поровну между
			 * нижним регистром и цифрами.
			 * Соответственно - вычисляем "свободный остаток".
			 *
			 * Случаи противоречивых настроек???
			 */
			$tmp_password_lenght = $passwordLenght;

			if (!empty($minimumUppercase))
			{
				$tmp_password_lenght = $tmp_password_lenght - $minimumUppercase;
			}

			if (!empty($minimumSymbols))
			{
				$tmp_password_lenght = $tmp_password_lenght - $minimumSymbols;
			}

			if (!empty($minimumIntegers))
			{
				$tmp_password_lenght = $tmp_password_lenght - $minimumIntegers;
			}

			if (!empty($minimumLowercase))
			{
				$tmp_password_lenght = $tmp_password_lenght - $minimumLowercase;
			}

			/**
			 * Если "пустое место" есть - делим его пополам между числами
			 * и нижним регистром.
			 * Если есть уже указанные минимальные значения для
			 * нижнего регистра и чисел, то прибавляем к ним.
			 */

			if(!empty($tmp_password_lenght)){
				if(!empty($minimumIntegers) || !empty($minimumLowercase)){
					$minimumIntegersTmp  = ceil($tmp_password_lenght / 2);
					$minimumLowercaseTmp = $tmp_password_lenght - $minimumIntegersTmp;

					$minimumIntegers = $minimumIntegers + $minimumIntegersTmp;
					$minimumLowercase = $minimumLowercase + $minimumLowercaseTmp;
				} else {
					$minimumIntegers  = ceil($tmp_password_lenght / 2);
					$minimumLowercase = $tmp_password_lenght - $minimumIntegers;
				}
			}
		}

		// Собираем буквы в ВЕРХНЕМ регистре, если указаны в настройках
		if (!empty($minimumUppercase))
		{
			while (count($passwordUppercase) < $minimumUppercase)
			{
				$key                 = rand(0, ($countlettersUppercase - 1));
				$char                = $lettersUppercase[$key];
				$passwordUppercase[] = $char;
			}
		}

		// Собираем символы, если указаны в настройках
		if (!empty($minimumSymbols))
		{
			while (count($passwordSymbols) < $minimumSymbols)
			{
				$key               = rand(0, ($countSymbols - 1));
				$char              = $symbols[$key];
				$passwordSymbols[] = $char;
			}
		}

		// Собираем буквы в нижнем регистре
		if (!empty($minimumLowercase))
		{
			while (count($passwordLowercase) < $minimumLowercase)
			{
				$key                 = rand(0, ($countLettersLowercase - 1));
				$char                = $lettersLowercase[$key];
				$passwordLowercase[] = $char;
			}
		}

		// Собираем числа
		if (!empty($minimumIntegers))
		{
			while (count($passwordIntegers) < $minimumIntegers)
			{
				$key                = rand(0, ($countIntegers - 1));
				$char               = $integers[$key];
				$passwordIntegers[] = $char;
			}
		}

		$password = array_merge($passwordLowercase, $passwordIntegers, $passwordSymbols, $passwordUppercase);
		shuffle($password);
		$password = implode($password);

		return $password;
	}
```

## Об авторе

![Толкачев Сергей Юрьевич](https://web-tolk.ru/images/uslugi/sergey-tolkachyov-apr-2023.webp)

### Толкачев Сергей Юрьевич

Joomla-разработчик. [Контрибьютер ядра Joomla](https://github.com/joomla/joomla-cms/pulls?q=is%3Apr+author%3Asergeytolkachyov+). Один из ведущих Telegram-канала русскоязычного Joomla-сообщества [JoomlaFeed](https://t.me/joomlafeed), один из модераторов [чата русскоязычного Joomla-сообщества](https://t.me/joomlaru). Мои расширения в официальном маркетплейсе расширений Joomla - [Joomla Extensions Directory](https://extensions.joomla.org/profile/profile/details/528051/). Имею публикации в [официальном журнале международного Joomla-сообщества - Joomla Community Magazine](https://magazine.joomla.org/authors/sergeytolkachyov) и на [официальном сайте русскоязычного Joomla-сообщества](https://joomlaportal.ru/users/sergey-tolkachyov).

Муж. Отец 3 детей.

Россия, Саратов.

## JSON-LD Schema

```json
{
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    "@id": "https://web-tolk.ru/#/schema/BreadcrumbList/17",
    "itemListElement": [
        {
            "@type": "ListItem",
            "position": 1,
            "item": {
                "@id": "https://web-tolk.ru/",
                "name": "Главная"
            }
        },
        {
            "@type": "ListItem",
            "position": 2,
            "item": {
                "@id": "https://web-tolk.ru/blog",
                "name": "Блог"
            }
        },
        {
            "@type": "ListItem",
            "position": 3,
            "item": {
                "name": "Метод генерации пароля пользователя Joomla 5 с учётом настроек com_users"
            }
        }
    ]
}
```

```json
{
    "@context": "https://schema.org",
    "@graph": [
        {
            "@type": "Organization",
            "@id": "https://web-tolk.ru/#/schema/Organization/base",
            "name": "WebTolk",
            "url": "https://web-tolk.ru/",
            "logo": {
                "@type": "ImageObject",
                "@id": "https://web-tolk.ru/#/schema/ImageObject/logo",
                "url": "images/webtolk-1080p.jpg",
                "contentUrl": "images/webtolk-1080p.jpg",
                "width": 1920,
                "height": 1080
            },
            "image": {
                "@id": "https://web-tolk.ru/#/schema/ImageObject/logo"
            },
            "sameAs": [
                "https://github.com/WebTolk",
                "https://github.com/sergeytolkachyov",
                "https://vk.com/web_tolk",
                "https://vk.com/webtolkru",
                "https://tenchat.ru/sergeytolkachyov",
                "https://t.me/sergeytolkachyov",
                "https://t.me/webtolkru"
            ]
        },
        {
            "@type": "WebSite",
            "@id": "https://web-tolk.ru/#/schema/WebSite/base",
            "url": "https://web-tolk.ru/",
            "name": "WebTolk",
            "publisher": {
                "@id": "https://web-tolk.ru/#/schema/Organization/base"
            }
        },
        {
            "@type": "WebPage",
            "@id": "https://web-tolk.ru/#/schema/WebPage/base",
            "url": "https://web-tolk.ru/blog/metod-generatsii-parolya-polzovatelya-joomla-5-s-uchjotom-nastroek-com-users",
            "name": "Метод генерации пароля пользователя Joomla 5 с учётом настроек com_users - WebTolk",
            "description": "Метод для генерации пароля в Joomla с учетом настроек компонента com_users. Также ссылка на gist в GitHub. Метод бывает нужен при разработке плагинов авторегистрации пользователей.",
            "isPartOf": {
                "@id": "https://web-tolk.ru/#/schema/WebSite/base"
            },
            "about": {
                "@id": "https://web-tolk.ru/#/schema/Organization/base"
            },
            "inLanguage": "ru-RU",
            "breadcrumb": {
                "@id": "https://web-tolk.ru/#/schema/BreadcrumbList/17"
            }
        },
        {
            "@type": "Article",
            "@id": "https://web-tolk.ru/#/schema/com_content/article/116",
            "isPartOf": {
                "@id": "https://web-tolk.ru/#/schema/WebPage/base"
            }
        }
    ]
}
```
