Продвинутый генератор паролей
Создавайте безопасные пароли для всех ваших учетных записей.
Исходный код доступен в конце страницы.
Вы можете:
- Использовать его в своих проектах — полностью или частично.
- Изучить принципы работы — код написан на чистом JavaScript и хорошо прокомментирован.
- Взять за основу для создания собственных инструментов.
Сгенерировать пароль:
Длина пароля: 12
Сложность пароля
Надежность:
0%
Очень слабый
Типы символов
Дополнительные опции
Скопировано!
Принцип работы генератора паролей
Эта веб-программа позволяет создавать четыре типа паролей с гибкими настройками:
Стандартный пароль
- Генерирует случайную комбинацию символов (A-Z, a-z, 0-9, спецсимволы).
- Настройки: длина (4–64 символа), исключение похожих символов (1, l, I, 0, O), запрет повторов и последовательностей (123, abc).
- Оценка надежности: учитывает длину, разнообразие символов и сложность.
Запоминаемый пароль
- Состоит из английских слов (например, AppleWind7Star), разделенных цифрами/символами.
- Оптимален для сервисов, где важна простота запоминания.
PIN-код
- Цифровая комбинация (4–64 цифры).
- Подходит для банковских карт, SIM-карт, но не рекомендуется как основной пароль.
Парольная фраза
- Случайные слоги с заглавными буквами и разделителями (например, Vufi-Taqo%Kedu).
- Баланс между надежностью и удобством запоминания.
Технические особенности
- Адаптивный дизайн: корректно отображается на ПК и мобильных устройствах.
- Безопасность: пароли генерируются в браузере, не передаются на сервер.
Инструменты:
- Кнопка «Копировать» для быстрого сохранения.
- Визуальный индикатор надежности (от «Очень слабый» до «Отличный»).
- Подсказки с рекомендациями для каждого типа пароля.
Как использовать код
- Скопируйте HTML, CSS и JavaScript в один файл (например, password-generator.html).
- Загрузите на сайт, или же просто откройте готовый html в браузере — программа работает без серверной части.
- Для кастомизации измените:
- Цвета в CSS (переменные --primary-color, --secondary-color).
- Словарь для запоминаемых паролей (массив vifedWords в JS).
Исходный код продвинутого генератора паролей:
HTML:
<div class="vifed-container"> <!-- Пресеты для выбора типа пароля --> <div class="vifed-presets"> </div> <!-- Пояснительное сообщение (будет заполняться динамически) --> <!-- Основные настройки --> <div class="vifed-settings"> <div class="vifed-setting-column"> <div class="vifed-setting-group"> <div class="vifed-range-container"> <input type="range" id="vifed-length" min="4" max="64" value="12"> <input type="number" id="vifed-length-number" min="4" max="64" value="12"> </div> </div> <div class="vifed-setting-group"> <div class="vifed-strength-meter"> <div class="vifed-strength-title"> </div> <div class="vifed-strength-bar"> </div> </div> </div> </div> <div class="vifed-setting-column"> <div class="vifed-setting-group"> <div class="vifed-checkbox-group"> <label class="vifed-checkbox-label"> <input type="checkbox" id="vifed-uppercase" checked> </label> <label class="vifed-checkbox-label"> <input type="checkbox" id="vifed-lowercase" checked> </label> <label class="vifed-checkbox-label"> <input type="checkbox" id="vifed-numbers" checked> </label> <label class="vifed-checkbox-label"> <input type="checkbox" id="vifed-symbols" checked> <span>Спецсимволы (!@#$%^&*)</span> </label> </div> </div> <div class="vifed-setting-group"> <h3>Дополнительные опции</h3> <div class="vifed-checkbox-group"> <label class="vifed-checkbox-label"> <input type="checkbox" id="vifed-avoid-similar"> <span>Исключать похожие символы (1,l,I,0,O)</span> </label> <label class="vifed-checkbox-label"> <input type="checkbox" id="vifed-no-duplicates"> <span>Не повторять символы</span> </label> <label class="vifed-checkbox-label"> <input type="checkbox" id="vifed-no-sequential"> <span>Исключать последовательности (123, abc)</span> </label> </div> </div> </div> </div> <!-- Область отображения пароля --> <div class="vifed-password-display"> <input type="text" id="vifed-password" readonly> <button id="vifed-copy-btn">Копировать</button> <div class="vifed-copy-notification" id="vifed-copy-notification">Скопировано!</div> </div> <!-- Кнопка генерации --> <button class="vifed-generate-btn" id="vifed-generate-btn">Сгенерировать</button> </div>
CSS:
/* Основные стили для контейнера */ .vifed-container { max-width: 800px; margin: 0 auto; background: #ffffff; padding: 30px; border-radius: 5px; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } /* Заголовок и описание */ .vifed-container h1 { color: #2c5364; text-align: center; margin-bottom: 20px; } .vifed-description { text-align: center; margin-bottom: 30px; color: #666; } /* Стили для пресетов */ .vifed-presets { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; margin-bottom: 20px; } .vifed-presets button { padding: 8px 15px; background: #e9ecef; color: #495057; border: none; border-radius: 5px; cursor: pointer; font-size: 0.9rem; transition: all 0.3s; } .vifed-presets button.active { background: #2c5364; color: white; } .vifed-presets button:hover:not(.active) { background: #d1d7dc; } /* Область отображения пароля */ .vifed-password-display { display: flex; margin-bottom: 20px; position: relative; } #vifed-password { flex-grow: 1; padding: 15px; font-size: 1.1rem; border: 1px solid #ddd; border-radius: 5px 0 0 5px; background-color: #f8f9fa; font-family: 'Courier New', monospace; } #vifed-copy-btn { padding: 0 20px; background: #8b7355; color: white; border: none; border-radius: 0 5px 5px 0; cursor: pointer; font-size: 1rem; transition: background 0.3s; } #vifed-copy-btn:hover { background: #3a7bd5; } /* Уведомление о копировании */ .vifed-copy-notification { position: absolute; right: 10px; top: -25px; background: #28a745; color: white; padding: 5px 10px; border-radius: 3px; font-size: 0.8rem; opacity: 0; transition: opacity 0.3s; } /* Блок с настройками */ .vifed-settings { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 20px; margin-bottom: 20px; } /* Группа настроек */ .vifed-setting-group { margin-bottom: 15px; } .vifed-setting-group h3 { margin-bottom: 10px; color: #2c5364; font-size: 1rem; } /* Слайдер длины пароля */ .vifed-range-container { display: flex; align-items: center; gap: 10px; } .vifed-range-container input[type="range"] { flex-grow: 1; } .vifed-range-container input[type="number"] { width: 60px; padding: 5px; border: 1px solid #ddd; border-radius: 3px; } /* Чекбоксы */ .vifed-checkbox-group { display: flex; flex-direction: column; gap: 8px; } .vifed-checkbox-label { display: flex; align-items: center; gap: 8px; cursor: pointer; user-select: none; } /* Кнопка генерации */ .vifed-generate-btn { display: block; width: 100%; padding: 12px; background: #2c5364; color: white; border: none; border-radius: 5px; cursor: pointer; font-size: 1.1rem; transition: background 0.3s; margin-bottom: 20px; } .vifed-generate-btn:hover { background: #3a7bd5; } /* Индикатор надежности */ .vifed-strength-meter { padding: 15px; background: #f8f9fa; border-radius: 5px; margin-bottom: 15px; } .vifed-strength-title { display: flex; justify-content: space-between; margin-bottom: 10px; } .vifed-strength-bar { height: 10px; background: #e9ecef; border-radius: 5px; overflow: hidden; } .vifed-strength-fill { height: 100%; width: 0%; transition: width 0.3s, background 0.3s; } .vifed-strength-text { margin-top: 5px; font-size: 0.9rem; text-align: right; color: #666; } /* Пояснительные сообщения */ .vifed-notice { padding: 12px; background: #f8f9fa; border-left: 4px solid #3a7bd5; border-radius: 3px; margin-bottom: 15px; font-size: 0.9rem; line-height: 1.5; } .vifed-notice.warning { border-left-color: #ffc107; background: #fff8e1; } /* Адаптивность */ @media (max-width: 600px) { .vifed-container { padding: 20px; } .vifed-settings { grid-template-columns: 1fr; } .vifed-password-display { flex-direction: column; } #vifed-password { border-radius: 5px; margin-bottom: 10px; } #vifed-copy-btn { border-radius: 5px; padding: 10px; } }
JavaScript:
// DOM элементы const vifedPasswordInput = document.getElementById('vifed-password'); const vifedCopyBtn = document.getElementById('vifed-copy-btn'); const vifedCopyNotification = document.getElementById('vifed-copy-notification'); const vifedGenerateBtn = document.getElementById('vifed-generate-btn'); const vifedLengthSlider = document.getElementById('vifed-length'); const vifedLengthNumber = document.getElementById('vifed-length-number'); const vifedLengthValue = document.getElementById('vifed-length-value'); const vifedUppercaseCheckbox = document.getElementById('vifed-uppercase'); const vifedLowercaseCheckbox = document.getElementById('vifed-lowercase'); const vifedNumbersCheckbox = document.getElementById('vifed-numbers'); const vifedSymbolsCheckbox = document.getElementById('vifed-symbols'); const vifedAvoidSimilarCheckbox = document.getElementById('vifed-avoid-similar'); const vifedNoDuplicatesCheckbox = document.getElementById('vifed-no-duplicates'); const vifedNoSequentialCheckbox = document.getElementById('vifed-no-sequential'); const vifedStrengthFill = document.getElementById('vifed-strength-fill'); const vifedStrengthPercent = document.getElementById('vifed-strength-percent'); const vifedStrengthText = document.getElementById('vifed-strength-text'); const vifedNotice = document.getElementById('vifed-notice'); const vifedPresetDefault = document.getElementById('vifed-preset-default'); const vifedPresetMemorable = document.getElementById('vifed-preset-memorable'); const vifedPresetPin = document.getElementById('vifed-preset-pin'); const vifedPresetPassphrase = document.getElementById('vifed-preset-passphrase'); // Текущий активный пресет let currentPreset = 'default'; // Наборы символов const vifedCharSets = { uppercase: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', lowercase: 'abcdefghijklmnopqrstuvwxyz', numbers: '0123456789', symbols: '!@#$%^&*()_+-=[]{}|;:,.<>?', similarChars: '1lIiIoO0', vowels: 'aeiouy', consonants: 'bcdfghjklmnpqrstvwxz' }; // Словарь для генерации запоминаемых паролей const vifedWords = [ 'apple', 'banana', 'orange', 'grape', 'lemon', 'peach', 'pear', 'cat', 'dog', 'bird', 'fish', 'lion', 'tiger', 'bear', 'sun', 'moon', 'star', 'cloud', 'rain', 'snow', 'wind', 'happy', 'brave', 'calm', 'gentle', 'honest', 'lucky', 'quiet', 'river', 'mountain', 'forest', 'ocean', 'desert', 'valley', 'island', 'book', 'pen', 'paper', 'computer', 'phone', 'keyboard', 'screen' ]; // Инициализация document.addEventListener('DOMContentLoaded', () => { // Связываем ползунок и числовое поле vifedLengthSlider.addEventListener('input', () => { vifedLengthNumber.value = vifedLengthSlider.value; vifedLengthValue.textContent = vifedLengthSlider.value; vifedGeneratePassword(); }); vifedLengthNumber.addEventListener('input', () => { if (vifedLengthNumber.value > 64) vifedLengthNumber.value = 64; if (vifedLengthNumber.value < 4) vifedLengthNumber.value = 4; vifedLengthSlider.value = vifedLengthNumber.value; vifedLengthValue.textContent = vifedLengthNumber.value; vifedGeneratePassword(); }); // Обработчики для всех чекбоксов document.querySelectorAll('.vifed-checkbox-group input[type="checkbox"]').forEach(checkbox => { checkbox.addEventListener('change', vifedGeneratePassword); }); // Обработчики кнопок vifedCopyBtn.addEventListener('click', vifedCopyPassword); vifedGenerateBtn.addEventListener('click', vifedGeneratePassword); // Обработчики пресетов vifedPresetDefault.addEventListener('click', () => vifedSetPreset('default')); vifedPresetMemorable.addEventListener('click', () => vifedSetPreset('memorable')); vifedPresetPin.addEventListener('click', () => vifedSetPreset('pin')); vifedPresetPassphrase.addEventListener('click', () => vifedSetPreset('passphrase')); // Генерируем первый пароль vifedGeneratePassword(); }); // Установка активного пресета function vifedSetPreset(preset) { currentPreset = preset; // Обновляем активную кнопку пресета vifedPresetDefault.classList.remove('active'); vifedPresetMemorable.classList.remove('active'); vifedPresetPin.classList.remove('active'); vifedPresetPassphrase.classList.remove('active'); document.getElementById(`vifed-preset-${preset}`).classList.add('active'); // Обновляем доступные настройки vifedUpdateSettingsVisibility(); // Генерируем пароль vifedGeneratePassword(); } // Обновление видимости настроек function vifedUpdateSettingsVisibility() { // Все чекбоксы сначала включаем vifedUppercaseCheckbox.disabled = false; vifedLowercaseCheckbox.disabled = false; vifedNumbersCheckbox.disabled = false; vifedSymbolsCheckbox.disabled = false; vifedAvoidSimilarCheckbox.disabled = false; vifedNoDuplicatesCheckbox.disabled = false; vifedNoSequentialCheckbox.disabled = false; // Для каждого пресета свои ограничения switch(currentPreset) { case 'default': break; case 'memorable': vifedUppercaseCheckbox.disabled = true; vifedUppercaseCheckbox.checked = false; vifedAvoidSimilarCheckbox.disabled = true; vifedAvoidSimilarCheckbox.checked = false; vifedNoDuplicatesCheckbox.disabled = true; vifedNoDuplicatesCheckbox.checked = false; vifedNoSequentialCheckbox.disabled = true; vifedNoSequentialCheckbox.checked = false; break; case 'pin': vifedUppercaseCheckbox.disabled = true; vifedUppercaseCheckbox.checked = false; vifedLowercaseCheckbox.disabled = true; vifedLowercaseCheckbox.checked = false; vifedSymbolsCheckbox.disabled = true; vifedSymbolsCheckbox.checked = false; vifedAvoidSimilarCheckbox.disabled = true; vifedAvoidSimilarCheckbox.checked = false; vifedNoDuplicatesCheckbox.disabled = true; vifedNoDuplicatesCheckbox.checked = false; vifedNoSequentialCheckbox.disabled = true; vifedNoSequentialCheckbox.checked = false; break; case 'passphrase': vifedNumbersCheckbox.disabled = true; vifedNumbersCheckbox.checked = false; vifedSymbolsCheckbox.disabled = true; vifedSymbolsCheckbox.checked = false; vifedAvoidSimilarCheckbox.disabled = true; vifedAvoidSimilarCheckbox.checked = false; vifedNoDuplicatesCheckbox.disabled = true; vifedNoDuplicatesCheckbox.checked = false; vifedNoSequentialCheckbox.disabled = true; vifedNoSequentialCheckbox.checked = false; break; } } // Основная функция генерации пароля function vifedGeneratePassword() { switch(currentPreset) { case 'default': vifedGenerateDefaultPassword(); break; case 'memorable': vifedGenerateMemorablePassword(); break; case 'pin': vifedGeneratePin(); break; case 'passphrase': vifedGeneratePassphrase(); break; } } // Генерация стандартного пароля function vifedGenerateDefaultPassword() { if (!vifedUppercaseCheckbox.checked && !vifedLowercaseCheckbox.checked && !vifedNumbersCheckbox.checked && !vifedSymbolsCheckbox.checked) { vifedPasswordInput.value = 'Выберите хотя бы один тип символов'; vifedUpdateNotice('default', false); return; } const length = parseInt(vifedLengthSlider.value); let charset = ''; if (vifedUppercaseCheckbox.checked) { charset += vifedAvoidSimilarCheckbox.checked ? vifedCharSets.uppercase.replace(/[IO]/g, '') : vifedCharSets.uppercase; } if (vifedLowercaseCheckbox.checked) { charset += vifedAvoidSimilarCheckbox.checked ? vifedCharSets.lowercase.replace(/[l]/g, '') : vifedCharSets.lowercase; } if (vifedNumbersCheckbox.checked) { charset += vifedAvoidSimilarCheckbox.checked ? vifedCharSets.numbers.replace(/[01]/g, '') : vifedCharSets.numbers; } if (vifedSymbolsCheckbox.checked) { charset += vifedCharSets.symbols; } if (charset.length === 0) { vifedPasswordInput.value = 'Недостаточно символов после фильтрации'; vifedUpdateNotice('default', false); return; } let password = ''; const usedChars = new Set(); for (let i = 0; i < length; i++) { let randomChar; let attempts = 0; const maxAttempts = 100; do { randomChar = charset[Math.floor(Math.random() * charset.length)]; attempts++; if (attempts >= maxAttempts) break; if (vifedNoDuplicatesCheckbox.checked && usedChars.has(randomChar)) { continue; } if (vifedNoSequentialCheckbox.checked && i > 0) { const prevCharCode = password[i-1].charCodeAt(0); const currentCharCode = randomChar.charCodeAt(0); if (Math.abs(currentCharCode - prevCharCode) === 1) { continue; } } break; } while (true); if (attempts >= maxAttempts) { vifedPasswordInput.value = 'Не удалось создать пароль с выбранными параметрами'; vifedUpdateNotice('default', false); return; } password += randomChar; usedChars.add(randomChar); } vifedPasswordInput.value = password; vifedUpdatePasswordStrength(password, 'default'); vifedUpdateNotice('default', true); } // Генерация запоминаемого пароля function vifedGenerateMemorablePassword() { const length = parseInt(vifedLengthSlider.value); const wordCount = Math.max(2, Math.floor(length / 5)); let password = ''; for (let i = 0; i < wordCount; i++) { const randomWord = vifedWords[Math.floor(Math.random() * vifedWords.length)]; const capitalizedWord = Math.random() > 0.5 ? randomWord.charAt(0).toUpperCase() + randomWord.slice(1) : randomWord; password += capitalizedWord; if (i < wordCount - 1) { let separators = ''; if (vifedNumbersCheckbox.checked) separators += vifedCharSets.numbers; if (vifedSymbolsCheckbox.checked) separators += vifedCharSets.symbols; if (separators.length > 0) { password += separators[Math.floor(Math.random() * separators.length)]; } else { password += '-'; } } } password = password.slice(0, length); vifedPasswordInput.value = password; vifedUpdatePasswordStrength(password, 'memorable'); vifedUpdateNotice('memorable', true); } // Генерация PIN-кода function vifedGeneratePin() { const length = parseInt(vifedLengthSlider.value); let pin = ''; for (let i = 0; i < length; i++) { pin += vifedCharSets.numbers[Math.floor(Math.random() * vifedCharSets.numbers.length)]; } vifedPasswordInput.value = pin; vifedUpdatePasswordStrength(pin, 'pin'); vifedUpdateNotice('pin', true); } // Генерация парольной фразы function vifedGeneratePassphrase() { const length = parseInt(vifedLengthSlider.value); let passphrase = ''; while (passphrase.length < length) { const consonant = vifedCharSets.consonants[Math.floor(Math.random() * vifedCharSets.consonants.length)]; const vowel = vifedCharSets.vowels[Math.floor(Math.random() * vifedCharSets.vowels.length)]; if (passphrase.length === 0 || Math.random() > 0.7) { passphrase += consonant.toUpperCase() + vowel; } else { passphrase += consonant + vowel; } if (passphrase.length < length - 1 && Math.random() > 0.5) { const separators = '-_'; passphrase += separators[Math.floor(Math.random() * separators.length)]; } } vifedPasswordInput.value = passphrase.slice(0, length); vifedUpdatePasswordStrength(passphrase, 'passphrase'); vifedUpdateNotice('passphrase', true); } // Копирование пароля function vifedCopyPassword() { vifedPasswordInput.select(); document.execCommand('copy'); vifedCopyNotification.style.opacity = '1'; setTimeout(() => { vifedCopyNotification.style.opacity = '0'; }, 2000); } // Оценка сложности пароля function vifedUpdatePasswordStrength(password, type) { if (!password) return; let score = 0; const length = password.length; switch(type) { case 'default': score = vifedCalculateDefaultStrength(password, length); break; case 'memorable': score = vifedCalculateMemorableStrength(password, length); break; case 'pin': score = vifedCalculatePinStrength(password, length); break; case 'passphrase': score = vifedCalculatePassphraseStrength(password, length); break; } score = Math.max(0, Math.min(100, score)); vifedStrengthFill.style.width = `${score}%`; vifedStrengthPercent.textContent = `${score}%`; if (score < 30) { vifedStrengthFill.style.backgroundColor = '#dc3545'; vifedStrengthText.textContent = 'Очень слабый'; } else if (score < 60) { vifedStrengthFill.style.backgroundColor = '#ffc107'; vifedStrengthText.textContent = 'Слабый'; } else if (score < 80) { vifedStrengthFill.style.backgroundColor = '#28a745'; vifedStrengthText.textContent = 'Хороший'; } else { vifedStrengthFill.style.backgroundColor = '#007bff'; vifedStrengthText.textContent = 'Отличный'; } } // Расчет надежности для стандартного пароля function vifedCalculateDefaultStrength(password, length) { let score = 0; score += Math.min(length * 4, 50); const hasUpper = /[A-Z]/.test(password); const hasLower = /[a-z]/.test(password); const hasNumber = /[0-9]/.test(password); const hasSymbol = /[^A-Za-z0-9]/.test(password); const charTypes = [hasUpper, hasLower, hasNumber, hasSymbol].filter(Boolean).length; score += (charTypes - 1) * 10; const uniqueChars = new Set(password).size; if (uniqueChars < length) { score -= (length - uniqueChars) * 2; } if (/(123|234|345|456|567|678|789|012|abc|bcd|cde|def|efg|fgh|ghi|hij|ijk|jkl|klm|lmn|mno|nop|opq|pqr|qrs|rst|stu|tuv|uvw|vwx|wxy|xyz)/i.test(password)) { score -= 20; } return score; } // Расчет надежности для запоминаемого пароля function vifedCalculateMemorableStrength(password, length) { let score = 0; score += Math.min(length * 5, 60); const hasUpper = /[A-Z]/.test(password); const hasLower = /[a-z]/.test(password); const hasNumber = /[0-9]/.test(password); const hasSymbol = /[^A-Za-z0-9]/.test(password); const charTypes = [hasUpper, hasLower, hasNumber, hasSymbol].filter(Boolean).length; score += (charTypes - 1) * 5; const uniqueChars = new Set(password).size; if (uniqueChars < length) { score -= (length - uniqueChars) * 1; } return score; } // Расчет надежности для PIN-кода function vifedCalculatePinStrength(password, length) { let score = 0; score += Math.min(length * 6, 60); const uniqueDigits = new Set(password).size; if (uniqueDigits < length) { score -= (length - uniqueDigits) * 3; } if (/(123|234|345|456|567|678|789|012)/.test(password)) { score -= 30; } return score; } // Расчет надежности для парольной фразы function vifedCalculatePassphraseStrength(password, length) { let score = 0; score += Math.min(length * 6, 70); if (/[A-Z]/.test(password)) { score += 10; } if (/[-_]/.test(password)) { score += 10; } const uniqueChars = new Set(password).size; if (uniqueChars < length) { score -= (length - uniqueChars) * 1; } return score; } // Обновление пояснительного сообщения function vifedUpdateNotice(type, success) { if (!success) { vifedNotice.textContent = 'Не удалось сгенерировать пароль с текущими настройками. Попробуйте изменить параметры.'; vifedNotice.className = 'vifed-notice warning'; return; } switch(type) { case 'default': vifedNotice.textContent = 'Этот пароль подходит для большинства сервисов. Используйте разные пароли для разных сайтов.'; vifedNotice.className = 'vifed-notice'; break; case 'memorable': vifedNotice.textContent = 'Запоминаемый пароль удобен для использования, но менее безопасен, чем случайный. Рекомендуется для неважных сервисов.'; vifedNotice.className = 'vifed-notice warning'; break; case 'pin': vifedNotice.textContent = 'PIN-код подходит только для сервисов, где требуются именно цифры (банковские карты, SIM-карты). Не используйте PIN-код как основной пароль!'; vifedNotice.className = 'vifed-notice warning'; break; case 'passphrase': vifedNotice.textContent = 'Парольная фраза легко запоминается и достаточно безопасна. Хороший выбор для сервисов, где вы часто вводите пароль вручную.'; vifedNotice.className = 'vifed-notice'; break; } }