zoukankan      html  css  js  c++  java
  • NO --- 24 js生成随机字符串的几种方法

    方法一:

    Math.random().toString(36).slice(-8)
    
    Math.random()                        // 生成随机数字, eg: 0.123456
                 .toString(36)           // 转化成36进制 : "0.4fzyo82mvyr"
                              .slice(-8);// 截取最后八位 : "yo82mvyr"

    36进制包含的字符为 0-9,a-z。
    10进制包含的字符为为 0-9。
    16进制包含的字符为 0-9,a-f。

    缺点:

    • 只能生成有 0-9、a-z字符组成的字符串
    • 由于 Math.random()生成的18位小数,可能无法填充36位,最后几个字符串,只能在指定的几个字符中选择。导致随机性降低。
    • 某些情况下会返回空值。例如,当随机数为 0, 0.5, 0.25, 0.125...时,返回为空值。

    方法二:

    function randomString(length, chars) {
        var result = '';
        for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
        return result;
    }
    var rString = randomString(32, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');

    方法三:

    node中使用crypto生成:

    'use strict';
    const crypto = require('crypto');
    
    module.exports = len => {
            // isFinite 判断是否为有限数值
        if (!Number.isFinite(len)) {
            throw new TypeError('Expected a finite number');
        }
    
        return crypto.randomBytes(Math.ceil(len / 2)).toString('hex').slice(0, len);
    };

    crypto.randomBytes(size[, callback])
    作用:生成加密强伪随机数据. size参数是指示要生成的字节数的数值。

    crypto.randomBytes生成的是字节数。
    因此,若 size为1(1个字节8位),则最后转化成16进制(4位)时,为2个字符。

    转自:https://www.jianshu.com/p/694e8e3a1dcb

  • 相关阅读:
    后缀数组
    后缀树
    字典树
    Revit二次开发: 文件损坏
    遍历取出指定文件夹下所有的文件
    Python类、模块、包的区别
    Opencv-python画图基础知识
    JSON C# Class Generator ---由json字符串生成C#实体类的工具
    Handsontable Dropdown with key-value pair
    怎样监听vue.js中v-for全部渲染完成?
  • 原文地址:https://www.cnblogs.com/cb-bin/p/13353749.html
Copyright © 2011-2022 走看看