gpt4 book ai didi

javascript - 在 Javascript 中生成唯一 ID

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:10:08 25 4
gpt4 key购买 nike

我想实现一个类似于 Imgur 的保存系统,如果用户按下按钮,将返回一个唯一的 5 个字符值。这是我目前所拥有的:

数据库后端使用从 5308416 开始的自动递增 ID。我使用修改后的 Radix 函数(见下文)将这些数字 ID 转换为字符。我使用反向函数将字符 ID 查找回数字数据库 ID。

function genID (value)
{
var alphabet = "23456789BCDFGHJKLMNPRSTVWXYZbcdfghjkmnpqrstvwxyz";

var result = "";
var length = alphabet.length;

while (value > 0)
{
result = alphabet[value % length] + result;
value = Math.floor (value / length);
}

return result;
}

问题是这些生成的 ID 非常容易预测。我的问题是,如何使生成的 ID 看起来随机但仍然是唯一的(这样我就可以在数据库中将它们作为数字查找)。我正在考虑使用一些加密算法,但不确定从哪里开始。任何帮助或建议将不胜感激(也许还有更好的方法)。

最佳答案

您是否必须能够双向进行(即将整数转换为其散列并再次返回)?如果您可以存储散列并以这种方式查找内容,那么创建一个函数来生成难以猜测但完整的散列空间就相对容易了。您使用素数生成一个序列,该序列仅在所有可能的排列都用尽后才会重复。

下面的 PHP 例子是 from my own code , 改编自 this site :

function hash($len = 6) {
$base = 36;
$gp = array(1,23,809,28837,1038073,37370257 /*,1345328833*/);
$maxlen = count($gp);
$len = $len > ($maxlen-1) ? ($maxlen-1) : $len;
while($len < $maxlen && pow($base,$len) < $this->ID) $len++;
if($len >= $maxlen) throw new Exception($this->ID." out of range (max ".pow($base,$maxlen-1).")");
$ceil = pow($base,$len);
$prime = $gp[$len];
$dechash = ($this->ID * $prime) % $ceil;
$hash = base_convert($dechash, 10, $base);
return str_pad($hash, $len, "0", STR_PAD_LEFT);
}

用 JavaScript 实现它会很容易,但理想情况下您也不需要 - 您的表上有一个插入触发器,用该算法的结果填充哈希字段(适用于 SQL,当然)。

关于javascript - 在 Javascript 中生成唯一 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11963123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com