Generating random string of fixed length
我想在PHP中生成一个6个字符长的唯一键,其中前3个应该是字母,后3个应该是数字。
我知道uniqid()函数,但它生成13个字符长的密钥,而且它也不符合我的要求,因为我需要前3个字符作为字母,后3个字符作为数字。
我可以用什么方法修改uniqid()来满足我的需求?
我也不希望发生任何冲突,因为如果发生这种情况,我的整个数据库将被浪费,这就是为什么我不能使用rand函数,因为很可能会发生冲突
- 有太多可能的方法可以做到这一点,你尝试过什么?
- 没有,因为我只知道uniqid()。我尝试过google,但在任何地方都只有这个函数。
- <?php$strings="abcdefghijklmnopqrstuvwxyz";$key=";while(strlen($key)<6)$key.=substr($strings,rand(0,strlen($strings)),1);for($i=0;$i<3;$i++)$key.=rand(0,9);echo$key;
您可以创建这样的手动随机化器:
1 2 3 4 5 6 7 8 9 10 11
| <?php
$alphabet = 'abcdefghijklmnopqrstuvwxyz';
$numbers = '0123456789';
$value = '';
for ($i = 0; $i < 3; $i++) {
$value .= substr($alphabet, rand(0, strlen($alphabet) - 1), 1);
}
for ($i = 0; $i < 3; $i++) {
$value .= substr($numbers, rand(0, strlen($numbers) - 1), 1);
} |
然后,$value变量将是类似"axy813"或"nbm449"的字符串。
- 碰撞呢?在这里碰撞的概率是多少?
- 它可以创建重复项。如果要确保不存在任何重复项,则需要根据某种数据源(如数据库或包含已生成值的文件)检查该值,如果该数据源是重复项,则需要重新创建一个新的数据源。
1 2 3 4 5 6 7 8 9 10 11 12 13
| <?php
$alphabets ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
$numbers ="1234567890";
$randstr = '';
for($i=0; $i < 6; $i++){
if($i<3){
$randstr .= $alphabets[rand(0, strlen($alphabets) - 1)];
} else {
$randstr .= $numbers[rand(0, strlen($numbers) - 1)];
}
}
echo $randstr;
?> |
这会帮你的