Добавить в корзинуПозвонить
Найти в Дзене
КвадроKot

17. Генератор паролей на Kotlin?

Давайте напишем генератор паролей для Android на Kotlin😁 - Name: Password Generator - Package name: com.example.passwordgenerator - Language: Kotlin - Minimum SDK: API 21 (Android 5.0) //---------------------------------------------- <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.passwordgenerator">
<!-- Разрешение на доступ к буферу обмена -->
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.PasswordGenerator">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<c
Оглавление

Давайте напишем генератор паролей для Android на Kotlin😁

1. Создание проекта в Android Studio.

  1. Запусти Android Studio.
  2. Выбери New ProjectEmpty Activity.
  3. Укажи:

- Name: Password Generator

- Package name: com.example.passwordgenerator

- Language: Kotlin

- Minimum SDK: API 21 (Android 5.0)

2. Файл манифеста (AndroidManifest.xml).

//----------------------------------------------

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.passwordgenerator">

<!-- Разрешение на доступ к буферу обмена -->
<uses-permission android:name="android.permission.INTERNET" />

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.PasswordGenerator">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

//----------------------------------------------

3. Разметка активности (res/layout/activity_main.xml).

//----------------------------------------------

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
tools:context=".MainActivity">

<!-- Поле для ввода длины пароля -->
<EditText
android:id="@+id/lengthInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp"
android:hint="Длина пароля"
android:inputType="number"/>

<!-- Чекбоксы для выбора символов -->
<CheckBox
android:id="@+id/uppercaseCheckbox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Верхний регистр (A-Z)"/>

<CheckBox
android:id="@+id/symbolsCheckbox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Спецсимволы (!@#)"/>

<!-- Кнопка генерации -->
<Button
android:id="@+id/generateButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Сгенерировать"/>

<!-- Поле для вывода результата -->
<TextView
android:id="@+id/passwordOutput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
android:paddingTop="16dp"/>

</LinearLayout>

//----------------------------------------------

4. Код активности (MainActivity.kt).

//----------------------------------------------

package com.example.passwordgenerator
import android.os.Bundle
import android.widget.Button
import android.widget.CheckBox
import android.widget.EditText
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.
activity_main)
// Инициализация элементов интерфейса
val lengthInput = findViewById<EditText>(R.id.lengthInput)
val uppercaseCheckbox = findViewById<CheckBox>(R.id.
uppercaseCheckbox)
val symbolsCheckbox = findViewById<CheckBox>(R.id.
symbolsCheckbox)
val generateButton = findViewById<Button>(R.id.
generateButton)
val passwordOutput = findViewById<TextView>(R.id.
passwordOutput)
// Обработчик нажатия на кнопку
generateButton.setOnClickListener {
try {
// Получаем длину пароля
val length = lengthInput.text.toString().toInt()
// Проверка минимальной длины
if(length < 4) {
Toast.makeText(this, "Минимальная длина - 4 символа!", Toast.
LENGTH_SHORT).show()
return@setOnClickListener
}
// Генерируем пароль
val password = generatePassword(
length = length,
useUppercase = uppercaseCheckbox.
isChecked,
useSymbols = symbolsCheckbox.
isChecked
)
// Выводим результат
passwordOutput.text = "Ваш пароль:\n$password"

} catch (e: NumberFormatException) {
// Обработка ошибки ввода
Toast.makeText(this, "Введите корректную длину!", Toast.LENGTH_SHORT).show()
}
}
}
// Функция генерации пароля
private fun generatePassword(
length: Int,
useUppercase: Boolean,
useSymbols: Boolean
): String {
// Базовые наборы символов
val lowercase = "abcdefghijklmnopqrstuvwxyz"
val uppercase = if(useUppercase) "ABCDEFGHIJKLMNOPQRSTUVWXYZ" else ""
val symbols = if(useSymbols) "!@#$%^&*()_+" else ""
val numbers = "0123456789"
// Собираем все доступные символы
val allCharacters = "$lowercase$uppercase$symbols$numbers"
// Проверка, что хотя бы один набор выбран
if(allCharacters.isEmpty()) {
return "Выберите параметры!"
}
// Генерируем случайные символы
return List(length) {
allCharacters.random()
}.joinToString("")
}
}

//----------------------------------------------

Пояснение кода:

  1. Инициализация элементов:
    - findViewById
    связывает XML-элементы с переменными в коде.
    - Каждый элемент получает свой ID из разметки.
  2. Обработчик кнопки:
    - setOnClickListener
    отслеживает нажатия.
    - Проверка введенной длины и вывод ошибок через
    Toast.
    - Вызов функции генерации с параметрами.
  3. Функция generatePassword:
    -
    Собирает доступные символы на основе чекбоксов.
    -
    List(length) создает список нужной длины.
    -
    .random() выбирает случайный символ.
    -
    joinToString("") объединяет символы в строку.

Советы для улучшения:

  1. Добавить кнопку копирования в буфер обмена.
  2. Валидация максимальной длины пароля.
  3. Добавить слайдер для выбора длины.
  4. Реализовать оценку сложности пароля.
  5. Добавить историю сгенерированных паролей.

Этот пример покрывает базовые концепции:

  • Работа с разметкой.
  • Обработка пользовательского ввода.
  • Основы Kotlin (функции, обработка исключений).
  • Взаимодействие элементов UI.