如何将整数压缩为更小的文本字符串?

How to compress an integer to a smaller string of text?

给定一个随机整数,例如 19357982357627685397198。如何将这些数字压缩成字符数更少的文本字符串?

文本字符串只能包含大小写的数字或字母字符。

我已经尝试过声称可以压缩的 Base64 和 Huffman 编码,但是 none 它们会使在键盘上书写时的字符串变短。

我还尝试制作某种算法,尝试将整数除以数字“2,3,...,10”,并检查结果中的最后一个数字是否是它被除以的数字(在除以 10 的情况下寻找 0)。因此,解密时,只需将数字乘以整数中的最后一个数字即可。但这不起作用,因为在某些情况下你不能除以任何东西,数字会保持不变,当它被解密时,它只会乘以一个比你开始时更大的数字。

我还尝试将整数分成 2 个数字的块,从左边开始并给它们一个字母(a=1,b=2, o=15), 当它到达 z 时它会回滚到 a。这没有用,因为当它被解密时,它不知道数字滚动了多少次z,因此比开始时的数字小得多。

我还尝试了其他一些常见的加密策略。比如Base32, Ascii85, Bifid Cipher, Baudot Code,还有一些我记不住了。

这似乎是一个无法解决的问题。但因为它以整数开头,所以每个数字可以包含 10 种不同的组合。而在字母表中,字母可以包含 26 种不同的组合。这使得您可以在 5 个字母中存储比在 5 位整数中存储更多的数据。所以在数学上用字符串存储比整数存储更多的数据是可能的,但我就是找不到任何人做过。

您从基数 10 切换到例如。通过重复除以 62 以 62 为底,并记录每一步的余数,如下所示:

Converting 6846532136 to base62: 

   Operation         Result   Remainder
6846532136 / 62    110427937     42
 110427937 / 62      1781095     47
   1781095 / 62        28727     21
     28727 / 62          463     21
       463 / 62            7     29
         7 / 62            0      7

然后您使用余数作为您选择的 base62 字母表的索引,例如:

0         1         2         3         4         5         6
01234567890123456789012345678901234567890123456789012345678901
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789

Giving:  H (7) d (29) V (21) V (21) v (47) q (42)   = HdVVvq
                                                      ------