我希望能够从整数生成唯一的字符串id。
所以例如'1'被转换为'o7wu',反之亦然。 (使用数字搜索数据库和字符串进行显示)
我发现了这个很棒的功能:http://kevin.vanzonneveld.net/techblog/article/create_short_ids_with_php_like_youtube_or_tinyurl/,但是对于小数字,生成的ID实际上是丑陋,例如 '1'是'aacd','2'是'aadd'。我还发现http://blog.kevburnsjr.com/php-unique-hash,生成的ID看起来很棒,但我认为它们只是“单向”。
我真的不需要任何加密,我只需要简短,漂亮。
对于那些因为我对一个漂亮的ID的定义而变得虚弱的人:我将chars和ints作为真正的随机混合定义。 NOT:aabb33,abc123,aa22cc。是的:dfh7,ao8f,z6t4 ..等等......
答案 0 :(得分:1)
随机数生成器可以被黑客攻击以减少随机数。实际上,你可以让它们每次使用相同的数字。如果将种子设置为相同的数字,您将获得相同的序列。这是一个通过传递单个数字来创建“随机”字符串的示例。
<?php
$n = 1;
// Any number to be added to the random seed
// Different numbers give different sequences
$offset = 45;
srand($n + $offset);
$code = '';
for($i=0; $i<4; $i++) {
// Numbers and letters
$char = rand(48, 57+26);
// Lower case letters
if ($char > 57) $char += 39;
$code .= chr($char);
}
echo "The code is $code\n";
使用此偏移量,1表示'ghep',2表示'tw70',3表示'ob0c'。要增加字符数,请将$i<4
更改为5或13.要更改包含的字符,请使用不同的ASCII codes范围。
答案 1 :(得分:0)
我也尝试了第一个链接,并且提供的代码收效甚微。我做了一些研究,我认为YouTube ID基本上只是随机生成的字符串(假设有近74种可能的组合,两个ID相似的机会非常渺茫)。下面是一个小小的PHP脚本,我用它来创建11个字符的YouTube风格的随机ID。
$length = 11;
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-';
$random_id = "";
for ($i = 0; $length > $i; $i++) {
$random_id .= $characters[mt_rand(0, strlen($characters) -1)];
}
上面的脚本基本上创建了一个64个字符的列表,与YouTube使用的字符相同,随机选择其中的11个字符,然后在for循环中将它们连接起来。然后,我将在列中生成的随机ID存储为通过URL搜索的随机ID。它不包括加密,但它是我能想到的最接近的东西。您可以通过更改$ length变量和更改组成$ characters变量的字符所使用的字符来更改字符串的长度。
很少提示,如果您使用的是MySQL数据库,请将随机ID列的排序规则更改为latin1_bin,这样就可以包含区分大小写。