自己写方法 比较灵活可变
- 字母数字字符长度可变 — 类似
generate-password
插件(此插件后文有介绍)
const randomFunc = {
lower: getRandomLower,
upper: getRandomUpper,
number: getRandomNumber,
symbol: getRandomSymbol,
}
function getRandomLower() {
return String.fromCharCode(Math.floor(Math.random() * 26) + 97)
}
function getRandomUpper() {
return String.fromCharCode(Math.floor(Math.random() * 26) + 65)
}
function getRandomNumber() {
return String.fromCharCode(Math.floor(Math.random() * 10) + 48)
}
function getRandomSymbol() {
const symbols = '!-@#%&,_+?.'
return symbols[Math.floor(Math.random() * symbols.length)]
}
function generatePassword({ length, lower, upper, number, symbol }) {
let generatedPassword = ''
const typesCount = lower + upper + number + symbol
const typesArr = [{ lower }, { upper }, { number }, { symbol }].filter((item) => Object.values(item)[0])
if (typesCount === 0) {
return ''
}
for (let i = 0; i < length; i++) {
typesArr.forEach((type) => {
const funcName = Object.keys(type)[0]
generatedPassword += randomFunc[funcName]()
})
}
// 生成密码
return generatedPassword.slice(0, length)
}
使用的时候可以指定位数和规则
generatePassword({ length: 8, lower: true, upper: true, number: true, symbol: true })
- 要求较低时 可用简单方法 只需传长度
- 此方法有弊端 可能生成的字符串为只有字母或只有字母数字 类型不全 要求不高的可以用这个方法
function generateRandomString(length) {
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+~`|}{[]:;?><,./-='; // Add any additional special characters you want to include
let result = '';
for (let i = 0; i < length; i++) {
const randomIndex = Math.floor(Math.random() * characters.length);
result += characters.charAt(randomIndex);
}
return result;
}
使用uuid
npm install uuid
页面中应用
import {v4 as uuidv4} from uuid
...
const id = uuidv4()
注: 1.uuid有4种方式具体可参考uuid使用文档
2. uuid生成规则比较固定 长度也固定
使用generate-password
npm install generate-password --save
页面使用
import generator from 'generate-password'
...
// 默认10位
const id = generator.generate() //uEyMTwervf
// 指定类型生成一个密码
const pasword = generator.generate({length:10,numbers: true,}) // 'uEyMTw32v9'
// 生成一组密码
var passwords = generator.generateMultiple(3, {
length: 10,
uppercase: false
});
// [ 'hnwulsekqn', 'qlioullgew', 'kosxwabgjv' ]
参数
key | 描述 | 默认值 |
---|---|---|
length | Integer,密码长度 | 10 |
numbers | Boolean,是否包含数字 | false |
symbols | Boolean or String 是否包含字符 | false |
uppercase | Boolean 密码中使用大写字母 | true |
lowercase | Boolean 密码中使用小写字母 | true |
strict | Boolean,密码必须至少包含每个池中的一个字符 | false |
exclude | String,要从密码中排除的字符 | ‘’ |
excludeSimilarCharacters | Boolean,密码排除类似的字符,如“i”和“l” | false |
注: 指定条件时至少有一个应该是true