<?php
/**
* Кодирует число в буквенно-числовую последовательность.
*
* @param int $number Число для кодирования.
* @return string Закодированная буквенно-числовая последовательность.
*/
function encodeNumber(int $number): string {
// Символы, используемые для кодирования
$charset = join('', [...range('a', 'z'), ...range('A', 'Z'), ...range(0, 9)]);
$base = strlen($charset); // Определение основания системы счисления
$encoded = '';
// Преобразование числа в заданную систему счисления
while ($number > 0) {
$remainder = $number % $base;
$encoded = $charset[$remainder] . $encoded;
$number = (int) ($number / $base);
}
return $encoded;
}
/**
* Декодирует буквенно-числовую последовательность в число.
*
* @param string $encoded Закодированная буквенно-числовая последовательность.
* @return int Декодированное число.
*/
function decodeNumber(string $encoded): int {
$charset = join('', [...range('a', 'z'), ...range('A', 'Z'), ...range(0, 9)]);
$base = strlen($charset);
$decoded = 0;
// Преобразование буквенно-числовой последовательности в число
$length = strlen($encoded);
for ($i = 0; $i < $length; $i++) {
$value = strpos($charset, $encoded[$i]);
$decoded = $decoded * $base + $value;
}
return $decoded;
}
$numbers = [56789, 89567, 129087, 9999999, 1e8];
// Кодирование чисел и вывод закодированных значений
foreach ($numbers as $number) {
$encoded = encodeNumber($number);
echo "$number: '$encoded' -> '" . decodeNumber($encoded) . "'\n";
}
preferences:
33.95 ms | 402 KiB | 5 Q