<?php
declare (strict_types=1);
namespace DtApp\ThinkLibrary\helper;
use Exception;
class Randoms
{
public function generate(int $length = 6, int $type = 1): string
{
$number = range(0, 9);
$lowerLetter = range('a', 'z');
$upperLetter = range('A', 'Z');
if ($type === 1) {
$charset = $number;
} elseif ($type === 2) {
$charset = $lowerLetter;
} elseif ($type === 3) {
$charset = $upperLetter;
} elseif ($type === 4) {
$charset = array_merge($number, $lowerLetter);
} elseif ($type === 5) {
$charset = array_merge($number, $upperLetter);
} elseif ($type === 6) {
$charset = array_merge($lowerLetter, $upperLetter);
} elseif ($type === 7) {
$charset = array_merge($number, $lowerLetter, $upperLetter);
} else {
$charset = $number;
}
$str = '';
for ($i = 0; $i < $length; $i++) {
$str .= $charset[random_int(0, count($charset) - 1)];
if ($type === 4 && strlen($str) >= 2) {
if (!preg_match('/\d+/', $str) || !preg_match('/[a-z]+/', $str)) {
$str = substr($str, 0, -1);
--$i;
}
}
if ($type === 5 && strlen($str) >= 2) {
if (!preg_match('/\d+/', $str) || !preg_match('/[A-Z]+/', $str)) {
$str = substr($str, 0, -1);
--$i;
}
}
if ($type === 6 && strlen($str) >= 2) {
if (!preg_match('/[a-z]+/', $str) || !preg_match('/[A-Z]+/', $str)) {
$str = substr($str, 0, -1);
--$i;
}
}
if ($type === 7 && strlen($str) >= 3) {
if (!preg_match('/\d+/', $str) || !preg_match('/[a-z]+/', $str) || !preg_match('/[A-Z]+/', $str)) {
$str = substr($str, 0, -2);
$i -= 2;
}
}
}
return $str;
}
}