Skip to content

Instantly share code, notes, and snippets.

@intelguasoft
Created May 12, 2020 16:42
Show Gist options
  • Save intelguasoft/1b4bf4a378295112d2b43e9329bd446d to your computer and use it in GitHub Desktop.
Save intelguasoft/1b4bf4a378295112d2b43e9329bd446d to your computer and use it in GitHub Desktop.
Clase para generar numero aleatorios
<?php
/**
* Clase para la generación de números aleatorios de manera
* personalizada por medio de argumentos.
*
* @package IntelGUA
* @subpackage Generators
* @author Henry Díaz <[email protected]>
*/
namespace IntelGUA\Generators;
class Generate
{
protected $currentNumber = "";
protected $listNumbers = [];
/**
* Permite obtener una determinada cantidad de números aleatorios
* indicada en el argumento $quantity, ya sea que los números sean
* únicos o se puedan repetir indicándolo en el argumento $unique.
*
* El resultado devuelto por el método es un array conteniendo la
* cantidad de números generados.
*
* @param int $quantity
* @param boolean $unique
* @return array
*/
public function getNumbersGenerated($quantity = 10, $unique = true, $length = 4)
{
//dd($this->generateNumber(2));
/* $this->currentNumber = $this->generateNumber($length);
for ($i=1; $i <= $quantity; $i++) {
if (in_array((string)$this->currentNumber, $this->listNumbers)) {
$this->currentNumber = $this->generateNumber($length);
}
} */
$this->listNumbers[] = $this->generateNumber($length);
while (count($this->listNumbers) <= $quantity) {
$this->currentNumber = $this->generateNumber($length);
if (in_array((string)$this->currentNumber, $this->listNumbers)) {
continue;
}else {
$this->listNumbers[] = $this->currentNumber;
}
}
return $this->listNumbers;
}
/**
* Genera un numero de manera aleatoria.
*
* El número generado es formado por la cantidad
* de dígitos que se indica en el parámetro $length.
*
* @param int $length
* @return string
*/
public function generateNumber($length = 4){
$chars = '1234567890'; /** Caracteres permitidos para formar la cantidad */
$chars_length = (strlen($chars) - 1); /** Designamos el largo de la cadena */
$string = $chars{rand(0, $chars_length)};
for ($i = 1; $i < $length; $i = strlen($string))
{
$r = $chars{rand(0, $chars_length)};
if ($r != $string{$i - 1}) $string .= $r;
}
return $string; /** Devolvemos la cantidad formada como cadena */
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment