|
|
| Zeile 1: |
Zeile 1: |
| <html lang="de"> | | <comments /> |
| <head>
| |
| <meta charset="UTF-8">
| |
| <title>Passwortgenerator</title>
| |
| <style>
| |
| label, input, select, textarea, button {
| |
| font-family: "Consolas", monospace;
| |
| margin: 5px 0;
| |
| size 20;
| |
| }
| |
| .form-field {
| |
| margin-bottom: 10px;
| |
| }
| |
| </style>
| |
| </head>
| |
| <body>
| |
| <p style="font-family: "Consolas", monospace; padding: 20px; margin: 20px">
| |
| <div class="form-field">
| |
| <label for="length">Passwortlänge........:</label>
| |
| <input type="number" id="length" value="16">
| |
| </div>
| |
|
| |
| <div class="form-field">
| |
| <label for="vowels">Vokale...............:</label>
| |
| <input type="text" size="32" id="vowels" value="aeiou">
| |
| </div>
| |
|
| |
| <div class="form-field">
| |
| <label for="consonants">Konsonanten..........:</label>
| |
| <input type="text" id="consonants" value="bcdfghjklmnpqrstvwxyz">
| |
| </div>
| |
|
| |
| <div class="form-field">
| |
| <label for="digits">Zahlen...............:</label>
| |
| <input type="text" id="digits" value="0123456789">
| |
| </div>
| |
|
| |
| <div class="form-field">
| |
| <label for="numDigits">Stellen..............:</label>
| |
| <input type="number" id="numDigits" value="4">
| |
| </div>
| |
|
| |
| <div class="form-field">
| |
| <label for="specials">Sonderzeichen........:</label>
| |
| <input type="text" id="specials" value="!$%&/=?+*#-.">
| |
| </div>
| |
|
| |
| <div class="form-field">
| |
| <label for="count">Anzahl der Passwörter:</label>
| |
| <select id="count">
| |
| <option value="1">1</option>
| |
| <option value="3">3</option>
| |
| <option value="8" selected>8</option>
| |
| <option value="10">10</option>
| |
| <option value="25">25</option>
| |
| <option value="50">50</option>
| |
| <option value="100">100</option>
| |
| </select>
| |
| </div>
| |
|
| |
| <div class="form-field">
| |
| <button id="generate">Passwörter erstellen</button>
| |
| </div>
| |
|
| |
| <div class="form-field">
| |
| <textarea id="output" rows="10" cols="80" placeholder="Erzeugte Passwörter erscheinen hier..."></textarea>
| |
| </div>
| |
|
| |
| <script>
| |
| document.getElementById("generate").addEventListener("click", function() {
| |
| // Werte aus dem Formular einlesen
| |
| var totalLength = parseInt(document.getElementById("length").value, 10);
| |
| var vowels = document.getElementById("vowels").value;
| |
| var consonants = document.getElementById("consonants").value;
| |
| var digitsAllowed = document.getElementById("digits").value;
| |
| var numDigits = parseInt(document.getElementById("numDigits").value, 10);
| |
| var specials = document.getElementById("specials").value;
| |
| var passwordCount = parseInt(document.getElementById("count").value, 10);
| |
|
| |
| var output = "";
| |
|
| |
| // Hilfsfunktion: Zufälliges Zeichen aus einem String auswählen
| |
| function randomChar(str) {
| |
| return str.charAt(Math.floor(Math.random() * str.length));
| |
| }
| |
|
| |
| // Hilfsfunktion: Erzeuge eine abwechselnde Zeichenkette (Vokal/Konsonant) der Länge "length"
| |
| function generateAlternatingSequence(length, vowels, consonants) {
| |
| if(length <= 0) return "";
| |
| var sequence = "";
| |
| // Zufällig entscheiden, ob mit Vokal (true) oder Konsonant (false) gestartet wird
| |
| var useVowel = Math.random() < 0.5;
| |
| for(var i = 0; i < length; i++){
| |
| sequence += useVowel ? randomChar(vowels) : randomChar(consonants);
| |
| useVowel = !useVowel;
| |
| }
| |
| return sequence;
| |
| }
| |
|
| |
| // Passwortgenerierungsschleife
| |
| for(var p = 0; p < passwordCount; p++){
| |
| // Berechne die Länge des nicht-numerischen Teils
| |
| var letterSectionLength = totalLength - numDigits;
| |
| // Bestimme die Basislänge für den ersten Buchstabenteil: (letterSectionLength - 1) geteilt durch 2, gerundet
| |
| var baseFirstPart = Math.round((letterSectionLength - 1) / 2);
| |
| // Zufällige Anpassung um -1, 0 oder 1
| |
| var adjustment = [-1, 0, 1][Math.floor(Math.random() * 3)];
| |
| var firstPartLength = baseFirstPart + adjustment;
| |
| // Sicherstellen, dass der erste Teil in einen sinnvollen Bereich fällt
| |
| if(firstPartLength < 0) firstPartLength = 0;
| |
| if(firstPartLength > letterSectionLength - 1) firstPartLength = letterSectionLength - 1;
| |
| // Die Länge des zweiten Buchstabenteils ergibt sich aus dem Rest (ein Sonderzeichen wird noch dazwischen gesetzt)
| |
| var secondPartLength = letterSectionLength - firstPartLength - 1;
| |
|
| |
| // Erzeuge den ersten alternierenden Buchstabenteil
| |
| var firstPart = generateAlternatingSequence(firstPartLength, vowels, consonants);
| |
| // Zufälliges Sonderzeichen auswählen
| |
| var specialChar = randomChar(specials);
| |
| // Erzeuge den zweiten alternierenden Buchstabenteil
| |
| var secondPart = generateAlternatingSequence(secondPartLength, vowels, consonants);
| |
| // Erzeuge den numerischen Teil (Ziffern)
| |
| var digitSequence = "";
| |
| for(var d = 0; d < numDigits; d++){
| |
| digitSequence += randomChar(digitsAllowed);
| |
| }
| |
|
| |
| // Komplettes Passwort zusammensetzen
| |
| var password = firstPart + specialChar + secondPart + digitSequence;
| |
| output += password + "\n";
| |
| }
| |
|
| |
| // Ausgabe in das Textfeld schreiben
| |
| document.getElementById("output").value = output;
| |
| });
| |
| </script>
| |
| </p>
| |
| </body>
| |
| </html>
| |