密码生成器选择密码应包含的内容

时间:2017-01-11 15:06:53

标签: javascript html

我想改进我的密码生成器。我希望用户可以选择密码应包含的内容。例如,您可以选择密码包含字母但没有数字和字符。有人能告诉我我必须做什么吗?

这是我的javascript和html: -

  function randomPassword(length) {
    var chars = "abcdefghijklmnopqrstuvwxyz!@#$%^&*()-+<>ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
    var pass = " ";
    for (var x = 0; x < length; x++) {
        var i = Math.floor(Math.random() * chars.length);
        pass += chars.charAt(i);
    }
    return pass;
}
function generate() {
    myform.row_password.value = randomPassword(myform.length.value);
}
<form name="myform" method="post" class="form-horizontal">
            <div class="form-group " >
                <div class="col-sm-10">
    <br>
                    <input class="rowpassword" type="text" name="row_password" size="45s">
                    <br>
                     <input class="form-control passwordlength" type="text" name="length" value="8" > password length
                     <br>
                     <br>
                     <input type="checkbox"> Groß - und Kleinbuchstaben
                     <br>
                     <input type="checkbox"> numbers
                     <br>
                     <input type="checkbox"> specialcharacters
                    <br>
                    <br>
                    <input type="button" class="form-control button" value="Passwort generieren" onClick="generate();" tabindex="2">
                </div>
            </div>
        </form>


  

1 个答案:

答案 0 :(得分:3)

首先,检查复选框的checked属性。 然后,您可以决定是否有多个字符池,或者应用依赖于检查内容的过滤器。 对于前者,您可以将适当的池添加到一起,这样就可以了解

var chars ="";
var letterPool= "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
var specialPool="!@#$%^&*()-+<>"
var numberPool="1234567890"

if(characterType.checked)
{
    chars+=characterTypePool;
}

等。 如果这样做,请不要忘记在没有选择时进行错误处理。

更新: 我添加了一个片段(减去错误处理)来演示(不要忘记勾选方框!)

 
function randomPassword(length) {
  var chars ="";
var letterPool= "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
var specialPool="!@#$%^&*()-+<>";
var numberPool="1234567890";

if(document.getElementById('letters').checked)
{
    chars+=letterPool;
}

if(document.getElementById('numbers').checked)
{
    chars+=numberPool;
}
  
if(document.getElementById('speChars').checked)
{
    chars+=specialPool;
}

    var pass = " ";
    for (var x = 0; x < length; x++) {
        var i = Math.floor(Math.random() * chars.length);
        pass += chars.charAt(i);
    }
    return pass;
}
function generate() {
    myform.row_password.value = randomPassword(myform.length.value);
}
<form name="myform" method="post" class="form-horizontal">
            <div class="form-group " >
                <div class="col-sm-10">
    <br>
                    <input class="rowpassword" type="text" name="row_password" size="45s">
                    <br>
                     <input class="form-control passwordlength" type="text" name="length" value="8" > password length
                     <br>
                     <br>
                     <input type="checkbox" id='letters'> Groß - und Kleinbuchstaben
                     <br>
                     <input type="checkbox" id='numbers'> numbers
                     <br>
                     <input type="checkbox" id='speChars'> specialcharacters
                    <br>
                    <br>
                    <input type="button" class="form-control button" value="Passwort generieren" onClick="generate();" tabindex="2">
                </div>
            </div>
        </form>

更新二:

为了保证每个选定的字符类型中至少有一个,您需要添加代码。一种方法是在开始时选择一个,并将其添加到最终密码中的随机位置。以下对代码的修改通过使用数组和拼接来实现:

function randomPassword(length) {
  var chars ="";
var letterPool= "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
var specialPool="!@#$%^&*()-+<>";
var numberPool="1234567890";
var guaranteed="";

if(document.getElementById('letters').checked)
{
    chars+=letterPool;
    guaranteed+=letterPool.charAt(Math.floor(Math.random() * letterPool.length));
}

if(document.getElementById('numbers').checked)
{
    chars+=numberPool;
  guaranteed+=numberPool.charAt(Math.floor(Math.random() * numberPool.length));
}

if(document.getElementById('speChars').checked)
{
    chars+=specialPool;
  guaranteed+=specialPool.charAt(Math.floor(Math.random() * specialPool.length));
}

    var pass =[];
    for (var x = 0,len=length-guaranteed.length; x < len; x++) {
        var i = Math.floor(Math.random() * chars.length);
        pass.push(chars.charAt(i));
    }
  for(var x = 0,len=guaranteed.length; x < len; x++)
    pass.splice(Math.floor(Math.random() * pass.length),0,guaranteed.charAt(x));
  pass=pass.join('');
    return pass;
}
function generate() {
    myform.row_password.value = randomPassword(myform.length.value);
}