在php中生成一组随机唯一代码

时间:2017-08-04 07:53:20

标签: php

我试图在php中生成一组独特的Alpha数字代码。我尝试使用匿名函数和闭包 在这里,当我生成超过1000个代码时,代码的更改会重复。因此,如果发现任何重复,我会尝试生成新代码 以下是我的代码,它没有按预期工作,我得到了#34;仍然重复存在"几次,甚至一次也没有再生代码。

$start = 0;
$count = 10;
$codes = [];
$another = $this;
for ($i=$start; $i < $count; $i++) {
    $getUniqueCode = function (&$codes) use ($another, &$getUniqueCode) {
        $newCode = $another->genRandomCode();
        if (in_array($newCode, $codes)) {
            echo "Regenerate on DUPLICATE FOUND - $newCode <br/>";
            return $getUniqueCode($codes);
        } else {
            return $newCode;
        }
    };
    $newCode = $getUniqueCode($codes);
    if (\in_array($newCode, $codes)) {
        echo "still DUPLICATE Exist - $newCode <br/>";
    }

    array_push($codes, $newCode);
}


private function genRandomCode()
{
    $str = "ABCDEFGHIGKLMNOPQRSTUVWXYZ0123456789";
    $randInt = rand(1000000, 9999999);
    $randString = "";
    for ($i=0; $i < 6; $i++) {
        $randRem = $randInt % 36;
        $randInt = $randInt / 36;
        $randString .= $str[$randRem];
    }
    return $randString;
}

1 个答案:

答案 0 :(得分:1)

您的原始代码会递归,但我认为您不需要这样做。

$start = 0;
$count = 10;
$codes = [];
$another = $this;
for ($i=$start; $i < $count; $i++) {
    //do not pass $codes as a reference here
    $getUniqueCode = function ($codes) use ($another) 
    {
        $newCode = $another->genRandomCode();
        while(in_array($newCode, $codes))
        {
            echo "Regenerate on DUPLICATE FOUND - $newCode <br/>";
        }

        return $newCode;
    };

    $newCode = $getUniqueCode($codes);
    if (\in_array($newCode, $codes)) {
        echo "still DUPLICATE Exist - $newCode <br/>";
    }

    array_push($codes, $newCode);
}

然而,可以说,处理这样的优惠券系统的更好方法是预先生成可能的优惠券代码,将它们存储在数据库中,并随机选择一个用于激活。这保证了一个独特的代码,并让您跟踪到目前为止使用的代码。