生成固定长度的随机字符串[重复]

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”的字符串。

【讨论】:

那么碰撞呢?碰撞的概率是多少? 它可以创建副本。如果您想确保没有任何重复,您需要根据某种数据源(如数据库或包含已生成值的文件)检查该值,如果重复则重新创建一个新的。

以上是关于生成固定长度的随机字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Dart生成固定长度随机数

生成长固定大小的随机字符串[重复]

在C语言中如何固定字符的长度

PHP生成随机密码的4种方法及性能对比

java 生成随机字符串

java产生随机数我怎么固定长度???