Как стать автором
Обновить

Простой сайт с генерацией логинов и паролей

Предисловие

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

Сайт

Более 2 недель назад я написал и выложил в открытий доступ свой простейший мини сайт, который генерирует примитивные логины и пароли. На все это ушло порядка 100 строк кода на языке JavaScript. Скриншот этого сайта вы можете рассмотреть ниже.

Мой сайт
Мой сайт

Согласен с тем, о чем вы сейчас могли подумать. Мой сайт не выделяется своей особой красотой (; Но это всего лишь его первый облик, который никоем образом не делает его хуже или неудобнее. Просто я не ставил первостепенной целью понравиться пользователю, для меня более важно удобство использования моего сайта, а не его красота.

На сайте нас встречают два поля, где первый выводит логин, а второй пароль, а так же кнопки, которые занимаются генерацией и копированием их. За эти две задачи отвечают два отдельных файла JavaScript. Первая как раз и занимается генерацией логина и пароля. А второй копирует их в буфер, чтобы вы могли сразу их использовать, без нужды их выделять и копировать. Все действия происходят на стороне клиента.

Давайте взглянем под капот моего сайта. Начнем с первого файла, его я назвал generate.js. Ко всему коду я прикрепил множество комментариев, так что не думаю нужным говорить отдельно о каждом из них (;

'Use strict'

// Функция для генерации символов
// Параметр keys получает рандомное число от 0 до 9 и использует его как ключ для получения какого-либо значения из списка symbol
function generate_symbol(keys)
{
	// Коллеция symbol содержащая в себе разнообразные символы
	let symbol = new Map([
	[0, '-'],
	[1, '!'],
	[2, '@'],
	[3, '#'],
	[4, '$'],
	[5, '%'],
	[6, '^'],
	[7, '&'],
	[8, '&'],
	[9, '*']
	])
	
	// Метод get считает значения по полученному выше рандомному ключу и возврощает его
	return symbol.get(keys)
}

// Функция для генерации цифр
// Параметр max отвечает за количество цифр
function generate_number(max)
{
	let final_number = ''
	// Цикл с полученной переменной max
	for (var i = 0; i < max; i++)
	{
		// random выдает дробное рандомное число
		// 10 это умножение дробного результата random на число 10, чтобы получилось дробное число с целым от 0 до 9
		// floor округлит дробное число к целому в меньшую степень
		let number = Math.floor(Math.random() * 10)
		// Присвоим полученное число из выражения выше финальному паролю
		final_number += number
		// Присвоим финальному паролю рандомный символ
		final_number += generate_symbol(number)
	}
	
	return final_number // Вернем готовый финальный пароль длинною 20 символов
}

// Функция, которая занимается генерацией комбинаций слов и местоимений
function generator_words()
{
	let words_human_arr = ['person', 'man', 'woman', 'child', 'boy', 'girl', 'friend', 'neighbour', 'name', 'surname', 'maiden', 'address', 'single', 'age', 'old', 'man', 'young'] // Массив слов связанных с человеком
	
	let pronouns_human_arr = ['i', 'you', 'we', 'they', 'he', 'she', 'it', 'my', 'me', 'your', 'our', 'us', 'their', 'them', 'his', 'him', 'her', 'its'] // Массив местоимений связанных с человеком
	
	// Переменаая, в которую запишется фиинальная комбинация слов и местоимений
	let final_words = ''
	
	// random выдает дробное рандомное число
	// 4 это умножение дробного результата random на число 4, чтобы получилось дробное число с целым от 0 до 3
	// floor округлит дробное число к целому в меньшую степень, а единица увеличит число на единицу чтобы цикл выполнился хотя бы один раз
	// Переменная amount хранит исход работы, которая описана в этом блоке комментариев, чтобы использовать его в цикле ниже
	let amount = Math.floor(Math.random() * 4) + 1
	
	// Цикл объединяет комбинацию слово и местоимение при каждой итерации
	for (let i = 0; i <= amount; i++)
	{
		// Думаю не стоит объяснять как работает random, ведь есть описание работы и пример выше.
		let words_human_arr_length = words_human_arr.length // Получаем количество элементов в массиве и записываем в переменную
		let num1 = Math.floor(Math.random() * words_human_arr_length) // Тут итог работы random умножается на переменную words_human_arr_length и записывается в переменную num1
		let word_human = words_human_arr[num1] // Выбираем рандомное слово из массива использую переменную num1
		
		// То же самое и с местоимением
		let pronouns_human_arr_length = pronouns_human_arr.length
		let num2 = Math.floor(Math.random() * pronouns_human_arr_length)
		let pronoun_human = pronouns_human_arr[num2]

		// Записываем итог работы итерации в переменную при каждой итерации цикла
		final_words += word_human + '_' +  pronoun_human
		if (amount > 1)
			final_words += '_'
	}
	
	return final_words
}

function genetate_password()
{
	let final_password = ''
	final_password += generate_number(10) // Передали функции аргументом количество цифр у сгенирированного числа
	return final_password
}

function genetate_login()
{
	let final_login = ''
	final_login = generator_words()
	return final_login
}

// Главная функция привязанная к кнопке Generate
function generate_login_and_password()
{
	// Получением элемента с id login
	let final_login = document.getElementById('login')
	// Присваение этому элементу новое значение, которые мы получили при работе всего кода
	final_login.value = genetate_login()
	// Получением элемента с id password
	let final_password = document.getElementById('password')
	// Присваение этому элементу новое значение, которые мы получили при работе всего кода
	final_password.value = genetate_password()
}

Второй файл занимается копированием в буфер обмена готового логина и пароля, его же я назвал copy.js. Символично)

'Use strict'

// Функция для копирования логина в буфер обмена при клики кнопки скопировать логин
function copy_login() {
	// Получением элемента с id login
	let final_login = document.getElementById('login')
	
	// Выбираем текстовое поле
	final_login.select();

	// Копируем текст внутри текстового поля
	document.execCommand("copy");
}

// Функция для копирования пароля в буфер обмена при клики кнопки скопировать пароль
function copy_password() {
	// Получением элемента с id password
	let final_password = document.getElementById('password')
		
	// Выбираем текстовое поле
	final_password.select();

	// Копируем текст внутри текстового поля
	document.execCommand("copy");
}

// Функция для копирования логина и пароля в буфер обмена при клики кнопки скопировать все
function copy_all(){
	// Получением элемента с id login
	let final_login = document.getElementById('login')
	// Получением элемента с id password
	let final_password = document.getElementById('password')
	
	// Объявляю переменную ca и записываю в нее значение final_login и final_password
	// Так же устанавливаю между ними символ новой строки, чтобы расположить их отдельно.
	// Так же присваиваю текст Login и Password, чтобы пользователь мог отличить логин и пароль
	let ca = 'Login: ' + final_login.value + ' ' + 'Password: ' + final_password.value // Там где ' ' лучше было бы поставить символ \n, но я таки не смог скопировать его в буфер обмена
	
	// Создаю временный элемент input и присваиваю его переменноой temporary_element_input
    let temporary_element_input = document.createElement("input")
	
	// Метод appendChild позволяет вставить в конец одного элемента другой элемент 
	// Чаще всего используется после создания элемента с помощью createElement
    document.body.appendChild(temporary_element_input)
	
	// Изменяю значение недавно созданного элемента input на значение переменной ca
    temporary_element_input.setAttribute('value', ca)
	
	// Выбираем текстовое поле
    temporary_element_input.select()
	
	// Копируем текст внутри текстового поля
    document.execCommand("copy")
	
	// Метод removeChild позволяет удалить элемент из другого элемента 
    document.body.removeChild(temporary_element_input)
}

Сайт оптимизирован под мобильные устройства, так что все должно работать и на мобильных устройствах (извините за тавтологию). Если есть проблемы, пишите о них в комментариях. А на этом моменте можно уже заканчивать статью, не забудь заглянуть на мой сайт, все ссылки прикрепил ниже! Так же предлагайте что изменить мне на сайте, что добавить, а что убрать. Ну и пишете свое мнение, я обязательно прочту их (;

Ссылки

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.