我想要生成像‘7 7HzdUakp’这样的唯一键。
我想把它放到数据库(mysql)中,但是我想要一个几乎无限的组合。
我可以使用随机函数生成它,但有时它可以生成两次相同的密钥。
解决了-我基于"id“生成它,查看下面的答案以获得更多详细信息。
发布于 2017-05-12 13:21:43
我是这样做的:
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);
}发布于 2017-05-12 15:15:38
几个小时后,我创建了:(用于测试的javastript)
看上去是随机的,但不是
随机生成的工作方式如下:
helper_arr = 1,所以:
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);
}https://stackoverflow.com/questions/43938713
复制相似问题