@MyNameNick

Как преобразовать 19-значное число в короткую буквенную строку?

Есть длинные числа типа 2452221399229541659. Если возможно, то как преобразовать это длинное число в более короткий набор буквенных символов с возможностью обратного преобразования?
  • Вопрос задан
  • 104 просмотра
Пригласить эксперта
Ответы на вопрос 5
Fragster
@Fragster
помогло? отметь решением!
https://www.php.net/manual/ru/function.base-convert.php , это до 36ричной. Если использовать регистрозависимые строки или не только буквы, можно ещё увеличить, но там надо уже самому писать там в комментах пример.
Ответ написан
rozhnev
@rozhnev Куратор тега PHP
Fullstack programmer, DBA, медленно, дорого
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Выбрать алфавит и перевести число в систему счисления с базой, равной длине этого алфавита.
<?php
const ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

function encode(int $val, string $alphabet): string
{
	if ($val === 0) {
		return $alphabet[0];
	}
	$base = strlen($alphabet);
	$result = '';
	while ($val > 0) {
		$digit = $val % $base;
		$val = intdiv($val, $base);
		$result = $alphabet[$digit] . $result;
	}
	return $result;
}

print encode(2452221399229541659, ALPHABET);
// 2V9coTtB2dB
Ответ написан
gzhegow
@gzhegow
aka "ОбнимиБизнесмена"
Да! Как раз вчера сделал. А всё-таки волны ноосферы (чо?) существуют)) Раз мне пришла идея, значит кому-то тоже.

https://ru.stackoverflow.com/a/1437277/195624

Впрочем, если тебе именно уникальность проверять, то есть crc32. Обратно не декодируешь, но что это "оно" можно понять.
Ответ написан
Adamos
@Adamos
{Минимальная длина записи} = логарифм по основанию {размер словаря} от {диапазон чисел, которые нужно записать}, округленный до целого вверх.
Так, например, если использовать для записи только 16 символов - получится длина максимального числа, переведенного в 16-ричную форму (например, это можно сделать вручную, программистским калькулятором).
Если же использовать 256 символов - длина результата будет вдвое меньше.

Но вы-то, поди, мечтаете о какой-то волшебной "упаковке" в разы. Напрасно.
В общем виде эта задача доказуемо неразрешима. А для разбора частных - вы не дали никакой информации.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы