将信息压缩成短代码

时间:2012-11-07 16:59:17

标签: php encoding compression

我需要将一些参数分组为一个简短的,不可预测的,可拼写的代码。例如:

  • 序列号:WJ-JHA5JK7E9RTAS
  • 日期:04/02/2013
  • 天:30
  • 有效:真实

压缩代码可能如下所示: 3xy9b0laiph3s

我的目标是尽可能缩短代码(当然不会丢失任何信息)。该算法也必须易于在其他语言中实现(因此它不能具有疯狂的特定依赖性)。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

大多数情况下,这是通过将数据存储在某处并创建ID然后进行压缩和使用来处理的。该系统最常见的用户是短网站。

  • 将数据存储在数据库中并获取行ID
  • 将base-10 row ID转换为base 32或64(PHP中的base_convert)
  • 使用看起来像'4F7c'
  • 的新ID
  • 当传递该ID时,只需将其转换为基础10并查找数据库中的数据

代码:

$id = 23590;
print $id;
$hash = base_convert($id, 10, 32);
print $hash;
$id = base_convert($hash, 32, 10);
print $id;

答案 1 :(得分:1)

对于任意短字符串,没有足够的信息来应用广义预测压缩方法。

您需要利用数据的已知功能。

示例:

  • 序列号似乎是大写字母和数字 - 每个字符36个值 - 长度为15个字符。这是36 ^ 15个可能的值,适合78位。
  • 日期可以转换为固定日期以来的天数。如果已知所有日期都在100年之内,则可以16位存储。
  • 如果天数不超过数年,则可以存储在9位。
  • 有效可以1位存储。

这是104位,可以是Base64编码为18个字符

请注意,序列号通常具有一两个校验和字符。如果您知道如何计算校验和,则可以省略此字符并在解码时重新计算。这可以为你节省一个Base64数字。

如果你想让结果不那么可预测,而不用担心加密很重,你可以确定地改组你的编码字符串。

答案 2 :(得分:0)

UUencode或Base64,但在这些编码案例中是匹配的。最终你可以为你的目的编辑这些编码(只有小写字母)。如果您拥有完全相同的数据量,这将是最简单的解决方案。但不是最小的一个。