生成固定长度的随机字符串[重复]
Posted
技术标签:
【中文标题】生成固定长度的随机字符串[重复]【英文标题】:Generating random string of fixed length [duplicate] 【发布时间】:2015-09-13 03:23:09 【问题描述】:我想在 php 中生成一个 6 字符长的唯一键,其中前 3 个应该是字母,后 3 个应该是数字。
我知道 uniqid()
函数,但它会生成 13 个字符的长密钥,而且它也不符合我的要求,因为我需要前 3 个字符作为字母,接下来的 3 个字符作为数字。
我可以通过什么方式修改uniqid()
以满足我的要求?
我也不希望发生任何冲突,因为如果发生这种情况,我的整个数据库将被浪费,这就是为什么我不能使用 rand 函数,因为我很可能会发生冲突
【问题讨论】:
有太多可能的方法可以做到这一点,您尝试过什么? 无,因为我只知道 uniqid()。我试过谷歌,但到处只有这个功能 【参考方案1】: <?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;
?>
这将为您完成工作
【讨论】:
那么碰撞呢?碰撞的概率是多少?【参考方案2】:您可以像这样创建手动随机发生器:
<?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”的字符串。
【讨论】:
那么碰撞呢?碰撞的概率是多少? 它可以创建副本。如果您想确保没有任何重复,您需要根据某种数据源(如数据库或包含已生成值的文件)检查该值,如果重复则重新创建一个新的。以上是关于生成固定长度的随机字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章