如何生成像#8052这样的discord id这样的4位唯一ID

时间:2017-01-18 02:32:52

标签: node.js database algorithm postgresql web-applications

 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

我试试这个但是太长了我使用nodejs和posgresql

2 个答案:

答案 0 :(得分:0)

由于您使用的是nodejs,因此可以在数据库中使用标准整数,并在向用户显示时将其转换为base36。在javascript中,数字上toString的参数是基数:

a = 46656
b = a.toString(36) // b = "1000"

如果您想将它从base36转换回数字,请使用parseInt

b = "1000"
c = parseInt(c, 36) // c = 46656

如果您希望字符串为4个字符,请在46656(" 1000")和1679615(" zzzz")之间生成一个数字。

答案 1 :(得分:0)

您可以使用Node.js应用生成ID。随机使用Math

Math.random().toString(36).substr(2, 4) // You can change the `4` to change the length.

它将输出如下字符串:92q6

详情:

Math.random() // 0.2433971674181521
Math.random().toString(36) // 0.ghlhdmdypp8bmx6r
  

javascript中数字类型的toString方法采用可选参数将数字转换为给定的基数。例如,如果你传递两个,你会看到你的数字用二进制表示。类似于十六进制(基数16),基数36使用字母来表示超过9的数字。通过将随机数转换为基数36,您将得到一堆看似随机的字母和数字。

     

- Chris Baker