密码生成器代码不生成密码

  • 本文关键字:密码 代码 javascript
  • 更新时间 :
  • 英文 :


我正在编写一个代码,为给定一组标准的用户随机生成密码。程序要求用户选择要包含的字符类型。一旦用户做了这个选择,代码应该为用户生成密码。我的代码经过一系列提示,但没有生成密码。有人能告诉我我做错了什么吗?

//  Code
var generateBtn = document.querySelector("#generate");
// Declare variables for uppercase, lowercase, numeric, and special characters.
var upperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var lowerCase = "abcdefghijklmnopqrstuvwxyz";
var numeric = "0123456789";
var special = "!@#$%^&*()_-+={}[];:'`~<,>.?/|";
var passwordLength;
// Function to check password length
function chooseLength() {
passwordLength = prompt("How many characters would you like to include in your password?");
// Use conditionals to restrict user to select password length between 8 and 128 characters inclusive
if (passwordLength<8){
alert("Password length must be at least 8 characters long");
chooseLength();
}else if (passwordLength>128){
alert("Password length must be less than 129 characters");
chooseLength();
}else if (isNaN(passwordLength)){
alert("Password length must be a number between 8-128 characters");
chooseLength();
}else{
alert("Please select what character types you would like to be included in your password.");
}
return passwordLength;
}
// Let's ask the user what character types to include in their password (must include at least one type)
function charType() {
var upperChar = confirm("Click OK to include Upper case characters");
var lowerChar = confirm("click OK to include lower case characters");
var specialChar = confirm("Click OK to include special characters");
var numChar = confirm("Click OK to include numbers");
// Alert to notify user that at least one character type must be selected
if (!(upperChar || lowerChar || specialChar || numChar)) {
return alert("You must select at least one character type");
}
}
// Function to generate password using the user-selected input(s)
function generatePassword(){
chooseLength();
console.log(passwordLength)
charType();

var chars = "";
var password = "";
if (upperChar && lowerChar && specialChar && numChar){
chars += upperCase + lowerCase + special +numeric;
}else if (upperChar  && numChar){
chars += upperCase +numeric;
}else if (numChar && specialChar){
chars += numeric + special;
}else if (upperChar && specialChar){
chars += upperCase + special;
}else if (upperChar && lowerChar) {
chars += upperCase + lowerCase;
}else if (lowerChar && numChar) {
chars += lowerCase + numeric;
}else if (lowerChar && specialChar){
chars += lowerCase + special;
}else if (upperChar){
chars += upperCase;
}else if(numberChar){
chars += numeric;
}else if (specialChar){
chars += special;
}else{
chars += lowerCase;
}
for(var i = 0; i < passwordLength; i++){
password += chars.charAt(Math.floor(Math.random() * chars.length));
}
return password;
}

// Write password to the #password input
function writePassword() {
var password1 ="";
password1 = generatePassword();
var passwordText = document.querySelector("#password");
passwordText.value = password1;
}
// Add event listener to generate button
generateBtn.addEventListener("click", writePassword);

我认为这是因为你在函数中定义了变量,并试图在其他函数中读取它

function charType() {
var upperChar = confirm("Click OK to include Upper case characters");
var lowerChar = confirm("click OK to include lower case characters");
var specialChar = confirm("Click OK to include special characters");
var numChar = confirm("Click OK to include numbers");

...rest code
}
你应该试着把它移到外面,变成一个全局变量,就像这样
var upperChar;
var lowerChar;
var specialChar;
var numChar;
function charType() {
upperChar = confirm("Click OK to include Upper case characters");
lowerChar = confirm("click OK to include lower case characters");
specialChar = confirm("Click OK to include special characters");
numChar = confirm("Click OK to include numbers");

...rest code
}

代码中有一些注释。

也就是说,我知道这可能只是为了练习,但不要使用这个密码生成器,因为它不够安全:)。

// use const if possible
const upperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const lowerCase = "abcdefghijklmnopqrstuvwxyz";
const numeric = "0123456789";
const special = "!@#$%^&*()_-+={}[];:'`~<,>.?/|";
// avoid using "globals"
// var passwordLength;
function chooseLength() {
passwordLength = prompt("How many characters would you like to include in your password?");
if (passwordLength < 8) {
alert("Password length must be at least 8 characters long");
chooseLength();
} else if (passwordLength > 128) {
alert("Password length must be less than 129 characters");
chooseLength();
} else if (isNaN(passwordLength)) {
alert("Password length must be a number between 8-128 characters");
chooseLength();
} else {
alert("Please select what character types you would like to be included in your password.");
}
return passwordLength;
}
function generatePassword() {

let password = "";
const passwordLength = chooseLength();
// you define this booleans in charType() this wont work cause of scope
const upperChar = confirm("Click OK to include Upper case characters");
const lowerChar = confirm("click OK to include lower case characters");
const specialChar = confirm("Click OK to include special characters");
const numChar = confirm("Click OK to include numbers");
if (!(upperChar || lowerChar || specialChar || numChar)) {
return alert("You must select at least one character type");
}

let chars = "";
// this ifs can be simplyfied a lot
if (upperChar) {
chars += upperCase;
}
if (lowerChar) {
chars += lowerCase;
}
if (specialChar) {
chars += special;
}
if (numChar) {
chars += numeric;
}
// this isn't really secure.. use https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues
for (let i = 0; i < passwordLength; i++) {
password += chars.charAt(Math.floor(Math.random() * chars.length));
}

return password;
}
function writePassword() {
document.getElementById("password").innerHTML = generatePassword();
}
document.getElementById("generate").addEventListener("click", writePassword);
<button id="generate">Generate Password</button>
<div id="password"></div>

最新更新