Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.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
Node.js 如何生成4位唯一id,如discord id,如#8052_Node.js_Database_Algorithm_Postgresql_Web Applications - Fatal编程技术网

Node.js 如何生成4位唯一id,如discord id,如#8052

Node.js 如何生成4位唯一id,如discord id,如#8052,node.js,database,algorithm,postgresql,web-applications,Node.js,Database,Algorithm,Postgresql,Web Applications,我试过了,但是我使用nodejs和posgresql的时间太长了,因为您使用的是nodejs,所以您可以在数据库中使用标准整数,并在向用户显示时将其转换为base36。在javascript中,数字上的参数为基数: DECLARE @chars NCHAR(36) SET @chars = N'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' DECLARE @result NCHAR(4) SET @result = SUBSTRING(@chars, CAST(

我试过了,但是我使用nodejs和posgresql的时间太长了,因为您使用的是nodejs,所以您可以在数据库中使用标准整数,并在向用户显示时将其转换为base36。在javascript中,数字上的参数为基数:

 DECLARE @chars NCHAR(36)
SET @chars = N'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'

DECLARE @result NCHAR(4)
SET @result = SUBSTRING(@chars, CAST((RAND() * LEN(@chars)) AS INT) + 1, 1)
            + SUBSTRING(@chars, CAST((RAND() * LEN(@chars)) AS INT) + 1, 1)
            + SUBSTRING(@chars, CAST((RAND() * LEN(@chars)) AS INT) + 1, 1)
            + SUBSTRING(@chars, CAST((RAND() * LEN(@chars)) AS INT) + 1, 1)

SELECT @result
如果要将其从base36转换回数字,请使用:


如果希望字符串为4个字符,请生成一个介于46656(“1000”)和1679615(“zzzz”)之间的数字

您可以使用Node.js应用程序生成id。用
Math

b = "1000"
c = parseInt(c, 36) // c = 46656
它将输出如下字符串:
92q6

详情如下:

Math.random().toString(36).substr(2, 4) // You can change the `4` to change the length.
javascript中数字类型的toString方法使用可选参数将数字转换为给定的基数。例如,如果您传递2,您将看到您的数字以二进制表示。与十六进制(基数16)类似,基数36使用字母表示9以外的数字。通过将一个随机数转换为基数36,您将得到一堆看似随机的字母和数字

-


什么是“不和谐id”?举个例子。说明约束条件是什么。不清楚为什么你的问题中有奇怪的字母字符串。比如#8016@jdv你应该在原始问题中输入详细信息,可以通过单击按钮进行编辑。你只需要特定范围内的随机数?请不要破坏你的帖子。根据你在这里发布时接受的许可证,它不再是你的专属。hi bro thx回答它可以产生多少变化,它有限制,如果有多少。你是对的,如果你想得到一个真正独特的随机,你必须使用另一种方法。正如Math.random()MDN页面中提到的:“Math.random()不提供加密安全的随机数。不要将它们用于任何与安全相关的事情。请改用Web Crypto API,更确切地说是window.Crypto.getRandomValues()方法。”-
Math.random().toString(36).substr(2, 4) // You can change the `4` to change the length.
Math.random() // 0.2433971674181521
Math.random().toString(36) // 0.ghlhdmdypp8bmx6r