需要一个数学算法来编码大整数到整数的数字

时间:2011-09-17 14:18:26

标签: algorithm math integer encode

我想将100位数的数字转换为小于10位,反之亦然。 因此,我将该编码号码传递给移动用户,并且在返回时可以再次生成100位数字。 我想在PHP,.NET或JS中使用它。

但在此之前我需要一个算法。

我有一些想法在我的脑海中使用简单的除法和加法乘法选项来实现。但需要一些更安全的东西。

4 个答案:

答案 0 :(得分:2)

你所要求的是不可能的。你试图将10 ^ 100个项目归入10 ^ 10个盒子。有些盒子会得到多个物品,因此无法将其反转回“原始物品”。

您可以将100位数的基数为10的数字编码为56位数的基数为62的数字(使用大写和小写罗马字母和数字0-9)。这里的数学是100 * log(10) / log(62)

要使用少于十个字符的字母进行编码,您需要一个带有~2 ^ 34个符号的字母。这里的数学是100 * log(10) / log(number of symbols)。祝你好运。

答案 1 :(得分:0)

如果您在100位数字中有超过10 000 000 000个不同的可能值,则无法将其映射到10位数字并可靠地映射回原始数字。

答案 2 :(得分:0)

一个100位数字,我认为这是十位数字。当谈论计算机上的数字时,谈论“数字”几乎毫无意义。

如果你实际上是指一个100位整数,那么这不会很容易适合单个64位整数(范围+/- 9,223,372,036,854,775,808),那么你就没有好好表达你的问题。并且没有任何压缩或编码可以让您使用不超过10位来表示100位。

如果你的意思是基数为10的100个数字,那么你正在处理bignums,所以应该把它们视为字节并使用bignum库。

100个十位数仍小于512位。

答案 3 :(得分:-1)

假设100位数字是10,那么如果我的数学没有错误,你需要10个基数100位来表示相同的数字。因此,不要只使用0-9中的字符,而是需要扩展字符以包含其他字形,包括大写和小写字母等,以完成100个字符的字母。好的,我的数学是错误的,所以忽略这一点,但考虑下一段。

另一个想法是使用散列算法从100位数字派生10字节散列,并将其用作服务器端数据库(散列表)中的密钥。没有编码/解码,只需将密钥发送到移动客户端,移动客户端就使用密钥从服务器获取100位数字。