commit 60f95f93ac5d886cb6a3a893faca2f32d9d2e7d8 Author: panariga Date: Tue Jan 7 15:54:23 2025 +0200 Add baseuaen.php diff --git a/baseuaen.php b/baseuaen.php new file mode 100644 index 0000000..15dd8c7 --- /dev/null +++ b/baseuaen.php @@ -0,0 +1,56 @@ + self::MAX_LENGTH) { + throw new InvalidArgumentException("Length must be between " . self::MIN_LENGTH . " and " . self::MAX_LENGTH); + } + + $base = strlen(self::CHARACTERS); + $code = ''; + + do { + $remainder = $number % $base; + $code = self::CHARACTERS[$remainder] . $code; + $number = intdiv($number, $base); + } while ($number > 0); + + return str_pad($code, $length, self::CHARACTERS[0], STR_PAD_LEFT); + } + + public function codeToInt(string $code): int + { + $base = strlen(self::CHARACTERS); + $length = strlen($code); + $number = 0; + + for ($i = 0; $i < $length; $i++) { + $char = $code[$i]; + $charIndex = strpos(self::CHARACTERS, $char); + if ($charIndex === false) { + throw new InvalidArgumentException("Invalid character in code"); + } + $number = $number * $base + $charIndex; + } + + return $number; + } + + public function generateRandomInt(int $length): int + { + if ($length < self::MIN_LENGTH || $length > self::MAX_LENGTH) { + throw new InvalidArgumentException("Length must be between " . self::MIN_LENGTH . " and " . self::MAX_LENGTH); + } + + $base = strlen(self::CHARACTERS); + $maxNumber = bcpow($base, $length) - 1; + + return random_int(0, $maxNumber); + } +} \ No newline at end of file