日期:2014-05-20  浏览次数:20650 次

求压缩数字串长度算法
现在有28位(0-9)数字编码,想通过一个算法,变成长度只有10位左右的新数字串,要求可以还原

我的应用:
  按标准生成了一个28位的数字编码,用户要求能用手机短信查询信息,由于28位太长,现在就想缩成10位数字左右

望高手赐教!

------解决方案--------------------
如果单单的根据一个28位的数字,变成10位的数字,有点不显示。
你生成28位数字的标准是什么?
------解决方案--------------------
28位数字如果是字符形式,可以转为数字形式.比如每14位数字字符(20个字节)转为一个long(8个字节).

如果结果不要整数,只要字符,可以把28位数字字符每14位看成一个整数,再转为36进制的数,再转为字符,看看可行不?

如果结果只要数字字符,压缩的可能性不大.
------解决方案--------------------
探讨
28位数字如果是字符形式,可以转为数字形式.比如每14位数字字符(20个字节)转为一个long(8个字节).

如果结果不要整数,只要字符,可以把28位数字字符每14位看成一个整数,再转为36进制的数,再转为字符,看看可行不?

如果结果只要数字字符,压缩的可能性不大.

------解决方案--------------------
28个数字可以转成12个字节存储,分为3组,每4个字节存储9位数字。
剩下1个数字用4 bit表示,并可以把这4bit拆成3份,分别与前面3组字节的最高2bit异或即可。
如果需要输入,12个字节可以用BASE64编码成16个英文字符。
再短就没有办法了。除非允许编码成中文。
------解决方案--------------------
28个数字是10的28次方种组合,要用10位组成,x^10=10^28,x=631,也就是一个位至少能够表示631种不同组合,所以需要使用中文