js 随机生成指定位数数字字母特殊字符的3种方式(自定义,uuid,generate-password)

自己写方法 比较灵活可变

  1. 字母数字字符长度可变 — 类似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 })
  1. 要求较低时 可用简单方法 只需传长度
    • 此方法有弊端 可能生成的字符串为只有字母或只有字母数字 类型不全 要求不高的可以用这个方法
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描述默认值
lengthInteger,密码长度10
numbersBoolean,是否包含数字false
symbolsBoolean or String 是否包含字符false
uppercaseBoolean 密码中使用大写字母true
lowercaseBoolean 密码中使用小写字母true
strictBoolean,密码必须至少包含每个池中的一个字符false
excludeString,要从密码中排除的字符‘’
excludeSimilarCharactersBoolean,密码排除类似的字符,如“i”和“l”false

注: 指定条件时至少有一个应该是true

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值