Нужен математический алгоритм для кодирования числа в большое целое число в целое число - PullRequest
0 голосов
/ 17 сентября 2011

Я хочу преобразовать числовое значение из 100 цифр в менее 10 цифр и наоборот. Поэтому я передаю этот кодированный номер мобильному пользователю и, вернувшись, снова могу сделать 100-значный номер. Я хочу использовать его в PHP, .NET или JS.

Но до этого мне нужен алгоритм для этого.

У меня есть идея использовать простые варианты деления-вычитания и сложения-умножения для реализации. Но нужно что-то более безопасное, чем это.

Ответы [ 4 ]

2 голосов
/ 17 сентября 2011

То, что вы просите, невозможно. Вы пытаетесь расколоть 10 ^ 100 предметов в 10 ^ 10 коробках. В какой-то ящик будет добавлено более одного предмета, поэтому невозможно вернуться обратно к «исходному» предмету.

Вы можете закодировать 100-значные числа Base-10 как 56-значное число Base-62 (используйте прописные и строчные буквы латинского алфавита и цифры 0-9). Математика здесь 100 * log(10) / log(62).

Чтобы кодировать, используя менее десяти символов из какого-либо алфавита, вам нужен алфавит с ~ 2 ^ 34 символами. Математика здесь 100 * log(10) / log(number of symbols). Удачи с этим.

0 голосов
/ 17 сентября 2011

100-значное число, я предполагаю, что это базовая десятая цифра. Когда о компьютерах говорят о цифрах, говорить о «цифрах» практически бессмысленно.

Если вы на самом деле имеете в виду 100-битное целое число, то это не легко вписывается в одно 64-битное целое число (диапазон +/- 9,223,372,036,854,775,808), тогда вы не очень хорошо сформулировали свой вопрос. И никакое сжатие или кодирование не позволят вам представить 100 бит, используя не более 10 бит.

Если вы имеете в виду 100 цифр в базовой десятке, то вы имеете дело с бигнумами, поэтому, вероятно, следует просто рассматривать их как байты и использовать библиотеку бигнумов.

100 из десятизначных цифр все еще меньше 512 бит.

0 голосов
/ 17 сентября 2011

Если предположить, что 100-значное число - это основание 10, то, если моя математика не ошибается, вам понадобится 10 базовых 100 цифр для представления того же числа. Поэтому вместо использования символов от 0 до 9 вам нужно будет расширить символы, чтобы включить другие глифы, в том числе буквы верхнего и нижнего регистра и т. Д., Чтобы завершить алфавит из 100 символов. ОК, мой математика неверна, поэтому не обращайте на это внимания, но рассмотрите следующий абзац.

Другая идея состоит в том, чтобы использовать алгоритм хеширования для получения 10-байтового хэша из вашего 100-значного числа и использовать его в качестве ключа в базе данных на стороне сервера (хеш-таблица). Нет кодирования / декодирования, просто отправьте ключ мобильному клиенту, мобильный клиент использует ключ для получения 100-значного числа с сервера.

0 голосов
/ 17 сентября 2011

Если у вас есть более 10 000 000 000 различных возможных значений в 100-значном числе, вы не сможете сопоставить это с 10-значным числом и надежно отобразить исходное число.

...