如何在PHP中创建逐渐增加的PIN?

如何在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

我目前正在做一个项目,我正在生成一个随机PIN。最初,每个管脚的长度为4位,即2345、5456等。然而,我试图使它,如果所有4位引脚使用,然后它增加到5位,然后6等基本上这样你就不会用完

我正在使用laravel并创造了一个特征:

<?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++)你的用例是什么?有一个概念,尽管它可能不完全像写的那样扩展。