如何在PHP中创建逐渐增加的PIN?
我目前正在做一个项目,我正在生成一个随机PIN。最初,每个管脚的长度为4位,即2345、5456等。然而,我试图使它,如果所有4位引脚使用,然后它增加到5位,然后6等基本上这样你就不会用完 我正在使用laravel并创造了一个特征:如何在PHP中创建逐渐增加的PIN?,php,laravel,Php,Laravel,我目前正在做一个项目,我正在生成一个随机PIN。最初,每个管脚的长度为4位,即2345、5456等。然而,我试图使它,如果所有4位引脚使用,然后它增加到5位,然后6等基本上这样你就不会用完 我正在使用laravel并创造了一个特征: <?php namespace App\Traits; use App\Models\Quiz; trait QuizPinTrait { private $pin = null; private $min, $max; pri
<?php
namespace App\Traits;
use App\Models\Quiz;
trait QuizPinTrait
{
private $pin = null;
private $min, $max;
private function setup()
{
$this->min = 1111;
$this->max = 9999;
$this->pin = mt_rand($this->min, $this->max);
}
public function generate()
{
$this->setup();
if ($this->checkNotInUse()) {
return $this->pin;
}
return false;
}
private function checkNotInUse()
{
$inUse = Quiz::where('pin', $this->pin)->count();
if (!$inUse || $inUse == 0) {
return true;
} else {
// stuck here...
}
}
}
您可以创建一个INT数组,[1111,…,9999]
和diff数组,与正在使用的管脚数组相对应,以获得可用的管脚
$isUse = Quiz:all()->pluck('pin');
$min = 1111;
$max = 9999;
$allPins = range($min,$max);
$notInUse = array_diff($allPins, $inUse);
// laravel one liner
$notInUse = collect(Quiz:all()->pluck('pin'))->diff(range($min,$max));
然后,当当前范围没有更多可用项时:
$min = $max+1;
$max *= 10;
这是一个需要更少内存的版本
选择一个介于0和9999之间的随机数。这是你的钥匙。然后,您可以执行以下操作:
function getPin() {
static $lastPin = 0;
$key = 4864;
$lastPin++;
return $lastPin ^ $key;
}
// Example: displaying lots of pins
$i=0;
while($i++<10002) {
echo getPin(), "\n";
}
函数getPin(){
静态$lastPin=0;
$key=4864;
$lastPin++;
返回$lastPin^$key;
}
//示例:显示大量管脚
$i=0;
虽然($i++)你的用例是什么?有一个概念,尽管它可能不完全像写的那样扩展。