<?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";
}
- Output for 8.0.1 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.6
- 56789: 'oV7' -> '56789'
89567: 'xsN' -> '89567'
129087: 'HKd' -> '129087'
9999999: 'P7Ct' -> '9999999'
100000000: 'gVKJo' -> '100000000'
preferences:
97.69 ms | 402 KiB | 89 Q