首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP -为新帖子生成唯一的随机密钥,如“7 7HzdUakp”

PHP -为新帖子生成唯一的随机密钥,如“7 7HzdUakp”
EN

Stack Overflow用户
提问于 2017-05-12 13:16:45
回答 3查看 1.3K关注 0票数 0

我想要生成像‘7 7HzdUakp’这样的唯一键。

我想把它放到数据库(mysql)中,但是我想要一个几乎无限的组合。

我可以使用随机函数生成它,但有时它可以生成两次相同的密钥。

解决了-我基于"id“生成它,查看下面的答案以获得更多详细信息

EN

回答 3

Stack Overflow用户

发布于 2017-05-12 13:21:43

我是这样做的:

代码语言:javascript
复制
private function generateKey()
{
    $alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
    $key = array();
    $alphaLength = strlen($alphabet) - 1;
    for ($i = 0; $i < 8; $i++) {
        $n = rand(0, $alphaLength);
        $key[] = $alphabet[$n];
    }
    return implode($key);
}
票数 0
EN

Stack Overflow用户

发布于 2017-05-12 13:32:46

如果不需要生成加密安全id,则可以使用。如果您需要更“安全”的东西,请使用字节($len);

票数 0
EN

Stack Overflow用户

发布于 2017-05-12 15:15:38

几个小时后,我创建了(用于测试的javastript)

看上去是随机的,但不是

  • char_keys包含8行和60个唯一字符。
  • helper_arr包含来自id -函数param的数字(按反序排列) "5342“=> 2,4,3,5
  • 它可以创建100000个唯一的键(有许多组合),但是现在我要升级这个(不同的键长)。

随机生成的工作方式如下:

  • 例如helper_arr = 1,2,3,4,5;
  • 键是生成的字符串键。

helper_arr = 1,所以:

  • key = char_keys1.substr(0,1),或
  • key = char_keys1.substr(10,11),或
  • key = char_keys1.substr(20,21),或
  • key = char_keys1.substr(30,31),或
  • key = char_keys1.substr(40,41),或
  • key = char_keys1.substr(50,51),或
  • key = char_keys1.substr(60,61)。 (这是唯一随机的事情;)
代码语言:javascript
复制
test = function(id){
    var char_keys = [
        '123456789',//only numbers here because it's random, users can create own links without number on first char 
        'LwFhy7YuEWGMH1IvoU85Jbjpkx4qN6zBmf9KtercZdQiRln2CSDXaVg3T0Ps', 
        'GTxkHtjXbB08ZWYqyiIu2agvdAlVFM6ShQznEcJrm47pU5sCLKfNP9eow1R3',
        '8QEmj3LeRdWuKsJngiBySf1Xz6wpVZ0Nkv2GFPHah7UMqAboYtlcT9rCx4D5', 
        'G5QdYeSl0LFBjJAHCD1xnmU9VfZRi6MX2PcwsaKoqT8p3vtNhWz7u4ybgrEI', 
        'j7fCcZNF6ytv58KUET1BAiMR2JqH0eIadrhQzug9kbmDnPSGLo4xXVlWpY3s', 
        'PyAMjsiox86zZ1vYCDwETm5SQlGK9b0rLJNV2aFtgXe4cW7IhqUpRfH3unBk',
        'h04edQN2c89xVSiCMBlw3LksWEKaUguGj6mDIvTJfRpPH1AozZyYnFrq75tX',
        '9YD82VBwJ0PrIUNG5Sx4dHX6vz1kZgWaRs7plFhfAuojytqbiCmQcKMeL3nT' 
    ];
    var id = id;
    var tmp = 0;
    var helper_arr = [];
    while(id>0){
        tmp = Math.floor(id/10);
        if(tmp==0) {helper_arr.push(id-(tmp*10)); break;}
        helper_arr.push(id-(tmp*10)+1);
        id=tmp;
    } 
    var key = char_keys[0].substr(getRandomInt(0,8),1);
    for(i=1;i<helper_arr.length;i++){
        key += char_keys[i].substr((getRandomInt(1,6)*helper_arr[i])-1,1);
    }
    for(i=helper_arr.length;i<char_keys.length;i++){
        key += char_keys[i].substr((getRandomInt(1,6)*1)-1,1);
    }
    return(key);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43938713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档