【问题标题】:Generating random string of fixed length [duplicate]生成固定长度的随机字符串[重复]
【发布时间】:2015-09-13 03:23:09
【问题描述】:

我想在 php 中生成一个 6 字符长的唯一键,其中前 3 个应该是字母,后 3 个应该是数字。

我知道 uniqid() 函数,但它会生成 13 个字符的长密钥,而且它也不符合我的要求,因为我需要前 3 个字符作为字母,接下来的 3 个字符作为数字。

我可以通过什么方式修改uniqid() 以满足我的要求?

我也不希望发生任何冲突,因为如果发生这种情况,我的整个数据库将被浪费,这就是为什么我不能使用 rand 函数,因为我很可能会发生冲突

【问题讨论】:

  • 有太多可能的方法可以做到这一点,您尝试过什么?
  • 无,因为我只知道 uniqid()。我试过谷歌,但到处只有这个功能

标签: php random


【解决方案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”的字符串。

【讨论】:

  • 那么碰撞呢?碰撞的概率是多少?
  • 它可以创建副本。如果您想确保没有任何重复,您需要根据某种数据源(如数据库或包含已生成值的文件)检查该值,如果重复则重新创建一个新的。
猜你喜欢
  • 2019-01-05
  • 1970-01-01
  • 2021-03-15
  • 2016-04-01
  • 2012-02-13
  • 1970-01-01
  • 2018-01-25
  • 2019-02-07
  • 2020-03-11
相关资源
最近更新 更多