具有特定格式的JavaScript随机密码

时间:2013-12-31 11:42:24

标签: javascript node.js random passwords

我想生成一个符合以下格式的随机密码:

  • 至少一个大写字符
  • 至少一个小写字符
  • 至少一位数
  • 长度应至少为6个字符

我想到了这一点,我唯一能想到的是一些长而丑的功能。你们能为我提供一种更简单,更有效的方法吗?

PS:我在客户端使用此功能,但在服务器端,在我的Node.js Web应用程序上。

3 个答案:

答案 0 :(得分:2)

这是我的解决方案:

/**
 * sets of charachters
 */
var upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
var lower = 'abcdefghijklmnopqrstuvwxyz'
var digit = '0123456789'
var all = upper + lower + digit

/**
 * generate random integer not greater than `max`
 */

function rand (max) {
  return Math.floor(Math.random() * max)
}

/**
 * generate random character of the given `set`
 */

function random (set) {
  return set[rand(set.length - 1)]
}

/**
 * generate an array with the given `length` 
 * of characters of the given `set`
 */

function generate (length, set) {
  var result = []
  while (length--) result.push(random(set))
  return result
}

/**
 * shuffle an array randomly
 */
function shuffle (arr) {
  var result = []

  while (arr.length) {
    result = result.concat(arr.splice(rand[arr.length - 1]))
  }

  return result
}
/**
 * do the job
 */
function password (length) {
  var result = [] // we need to ensure we have some characters

  result = result.concat(generate(1, upper)) // 1 upper case
  result = result.concat(generate(1, lower)) // 1 lower case
  result = result.concat(generate(1, digit)) // 1 digit
  result = result.concat(generate(length - 3, all)) // remaining - whatever

  return shuffle(result).join('') // shuffle and make a string
}

console.log(password(6))

答案 1 :(得分:-1)

我们如何将格式放入字符串中,然后我们可以将其放入数组中,然后随机选择一个并在该子数组项中随机选择和项目:

var uppers = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var lowers = "abcdefghijklmnopqrstuvwxyz";
var digits = "01234567890";
var all = uppers + lowers + digits;
var choices = [uppers,lowers,digits];
var checks = [];

var password = ""; 
var ranLength = Math.ceil(Math.random()*10)+3;
for(var i=0; i<ranLength; i++){
    var choice = choices[Math.ceil(Math.random()*3)-1];
    var choiceItem = choice[Math.ceil(Math.random()*(choice.length))-1]
    password += choiceItem;
}

for(var i=0; i<3; i++){ // Append needed values to end
    var choice = choices[i]; 
    var choiceItem = choice[Math.ceil(Math.random()*(choice.length))-1] 
    password += choiceItem;
}

password = password.split('').sort(function(){
    return 0.5 - Math.random(); 
}).join('');

alert(password);

编辑:抱歉犯了一个小错误。固定的。

答案 2 :(得分:-2)

试试这个......

var randomstring = Math.random().toString(36).slice(-8);