Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript生成唯一的随机字符串_Javascript_Node.js - Fatal编程技术网

使用Javascript生成唯一的随机字符串

使用Javascript生成唯一的随机字符串,javascript,node.js,Javascript,Node.js,我正在创建一个应用程序,有时我需要允许用户生成一些随机字符串。我想强制按以下格式生成: xxxx-xxxx-xxxx 其中“x”是数字[0-9]或字符[A-Z]。最有效的方法是什么?生成时,我还需要检查它是否已经存在于数据库中,因此我有点担心它所需的时间。您可以使用加密库 var crypto = require('crypto'); //function code taken from http://blog.tompawlak.org/how-to-generate-random-val

我正在创建一个应用程序,有时我需要允许用户生成一些随机字符串。我想强制按以下格式生成:

xxxx-xxxx-xxxx

其中“x”是数字[0-9]或字符[A-Z]。最有效的方法是什么?生成时,我还需要检查它是否已经存在于数据库中,因此我有点担心它所需的时间。

您可以使用加密库

var crypto = require('crypto');

//function code taken from http://blog.tompawlak.org/how-to-generate-random-values-nodejs-javascript
function randomValueHex (len) {
    return crypto.randomBytes(Math.ceil(len/2))
        .toString('hex') // convert to hexadecimal format
        .slice(0,len).toUpperCase();   // return required number of characters
}

var string = randomValueHex(4)+"-"+randomValueHex(4)+"-"+randomValueHex(4);
console.log(string);
检查以下线程:


您可以检查数据库中是否存在该字段。如果有,只需生成一个新令牌。然后再检查一遍。如果你没有庞大的用户群,它存在的可能性很低。因此,长循环检查的概率也很低。

您可以使用加密库

var crypto = require('crypto');

//function code taken from http://blog.tompawlak.org/how-to-generate-random-values-nodejs-javascript
function randomValueHex (len) {
    return crypto.randomBytes(Math.ceil(len/2))
        .toString('hex') // convert to hexadecimal format
        .slice(0,len).toUpperCase();   // return required number of characters
}

var string = randomValueHex(4)+"-"+randomValueHex(4)+"-"+randomValueHex(4);
console.log(string);
检查以下线程:


您可以检查数据库中是否存在该字段。如果有,只需生成一个新令牌。然后再检查一遍。如果你没有庞大的用户群,它存在的可能性很低。因此,长循环检查的概率也很低。

我们可以将其简化为

require("crypto").randomBytes(64).toString('hex')

我们可以让它变得如此简单,就像

require("crypto").randomBytes(64).toString('hex')

可能的重复项您是否确实需要检查重复项?你可能没那么幸运,算算吧
Math.pow(36,12).toLocaleString()
?你只关心它的唯一性吗?你看过node.js库吗?可能重复的?你真的需要检查重复吗?你可能没那么幸运,算算吧
Math.pow(36,12).toLocaleString()
?你只关心它的唯一性吗?你看过node.js库吗?