如何生成 4 位唯一 id,如 discord id,如 #8052
Posted
技术标签:
【中文标题】如何生成 4 位唯一 id,如 discord id,如 #8052【英文标题】:How to generate 4 digit unique id like discord id like #8052 【发布时间】:2017-06-02 07:15:39 【问题描述】: 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
【问题讨论】:
什么是“discord id”?显示一个例子。说明约束是什么。目前尚不清楚为什么您的问题中有奇怪的 alpha 字符字符串。 点赞 #8016 @jdv 您应该在原始问题中填写详细信息,可以通过单击edit按钮进行编辑。 你只需要一个特定范围内的随机数? ***.com/q/2175512/1531971 请不要破坏您的帖子。根据您在此处发布时接受的许可,它不再是您的专属。 【参考方案1】:您可以使用 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
【讨论】:
嗨,兄弟,谢谢你回答它可以产生多少变化,如果有的话,它有多少限制。 你是对的,如果你想得到一个真正独特的随机,你必须使用另一种方式。正如 Math.random() MDN 页面中提到的那样:“Math.random() 不提供加密安全的随机数。不要将它们用于与安全相关的任何事情。改用 Web Crypto API,更准确地说是 window.crypto .getRandomValues() 方法。” - developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…【参考方案2】:由于您使用的是 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”)之间的数字。
【讨论】:
以上是关于如何生成 4 位唯一 id,如 discord id,如 #8052的主要内容,如果未能解决你的问题,请参考以下文章