【发布时间】:2016-03-16 17:36:09
【问题描述】:
我有一种情况,我需要生成简短的伪随机字母数字标记,这些标记是唯一的、可验证的,并且可以由人类轻松键入。这些将从 Web 应用程序生成。代币不需要高度安全——它们被用于愚蠢的网络游戏中以获取愚蠢的奖品。由于各种原因,客户希望这些令牌是人类可读的并通过电子邮件进行处理。这是没有商量余地的(我知道......但出于我无法控制的原因,这是必须的)。
换句话说,假设我们得到代码“ABCDE12345”
必须有办法说“ABCDE12345”是“有效的”。例如:开始运行我编写的算法时,可能有两三个字符会生成正确的剩余字符序列。例如,
f("AB")==="CDE12345"玩游戏的两个人不应该生成相同的令牌。在我看来,我很乐意使用以毫秒为单位的当前时间 + 游戏角色名称和分数来播种自制 RNG。 (也就是说,不要使用 Math.random,因为这是一个网络应用程序)。这将为上面提到的两个或三个字符序列播种。
我错过了什么吗?我不是在寻找具体的算法,而是在寻找您的建议。我有什么遗漏吗?
【问题讨论】:
-
我假设游戏是无状态的,当涉及到代码时? (即它不能存储已知生成的代码)?
-
游戏在服务器意义上是无状态的。话虽如此,它使用 localStorage 将角色、分数等保存在玩家的设备上。
-
你有没有设法解决这个问题?
-
我做到了!但这是 5 年和 2 份工作前的事......我不记得我最终是如何解决它的,只是这里的讨论让我走上了一条好路。
标签: javascript algorithm random token