数学.随机对这种事情不好
服务器端
使用节点加密模块-
var crypto=require(“crypto”);var id=crypto.randomBytes(20).toString('hex');//“bb5dc8842ca31d4603d6aa11448d1654”
结果字符串的长度将是您生成的随机字节的两倍;编码为十六进制的每个字节是2个字符。20个字节将是40个十六进制字符。
客户端
使用浏览器的加密加密模块,-
const id=window.crypto.randomUUID()console.log(id)//bd4d099b-3d39-4aad-a59c-c45dfac8eaf0
或者 加密.get随机值-
这个crypto.getRandomValues()
方法可以获得加密的强随机值。作为参数给出的数组由随机数填充(密码意义上的随机数)。
//dec2hex::Integer->字符串//即0-255->'00'-'f'功能dec2hex(dec){return dec.toString(16).padStart(2,“0”)}//generateId::Integer->字符串函数生成器ID(len){var arr=新Uint8Array((len||40)/2)window.crypto.getRandomValues(arr)return Array.from(arr,dec2hex).join(“”)}console.log(generateId())//“82defcf324571e70b0521d79cce2bf3fffccd69”console.log(生成ID(20))//“c1a050a4cd1556948d41”
分步控制台示例-
>var arr=new Uint8Array(4)#make 4字节数组(值0-255)>阿珥Uint8Array(4)[0,0,0,0]>窗口.加密加密{精细:精细加密}>window.crypto.getRandomValues()TypeError:Crypto.getRandomValues需要至少1个参数,但只传递了0个>window.crypto.getRandomValues(arr)Uint8Array(4)[235、229、94、228]
对于IE11支持,您可以使用-
(window.crypto ||window.msCrypto).getRandomValues(arr)
有关浏览器覆盖范围,请参阅https://caniuse.com/#feat=getrandomvalues
客户端(旧浏览器)
如果必须支持旧浏览器,请考虑以下内容乌伊德
-
const uuid=require(“uuid”);常量id=uuid.v4();//“110ec58a-a0f2-4ac4-8393-c866d813b8d1”