我需要将一些参数组合成一个简短的、不可预测的、可拼写的代码。前任:
- 序列号:WJ-JHA5JK7E9RTAS
- 日期:2013 年 4 月 2 日
- 天数:30
- 有效:真
压缩后的代码可能如下所示:3xy9b0laiph3s
我的目标是使代码尽可能短(当然,不会丢失任何信息)。该算法也必须很容易用其他语言实现(因此它不能有疯狂的特定依赖关系)。有什么想法吗?
我需要将一些参数组合成一个简短的、不可预测的、可拼写的代码。前任:
压缩后的代码可能如下所示:3xy9b0laiph3s
我的目标是使代码尽可能短(当然,不会丢失任何信息)。该算法也必须很容易用其他语言实现(因此它不能有疯狂的特定依赖关系)。有什么想法吗?
对于任意短字符串,没有足够的信息来应用压缩的广义预测方法。
您需要利用数据的已知特征。
例子:
那是 104 位,可以 Base64 编码为 18 个字符
请注意,序列号通常有一两个校验和字符。如果你知道校验和是如何计算的,你可以省略这个字符并在解码时重新计算它。这可以在这里为您节省一个 Base64 数字。
如果您想让结果更难以预测,而不用担心重度加密,您可以确定性地打乱您的编码字符串。
大多数情况下,这是通过将数据存储在某处并创建一个 ID 来处理的,然后将其压缩和使用。该系统最常见的用户是短 URL 网站。
代码:
$id = 23590;
print $id;
$hash = base_convert($id, 10, 32);
print $hash;
$id = base_convert($hash, 32, 10);
print $id;
UUencode 或 Base64,但在这些编码中大小写是匹配的。最终,您可以根据自己的目的编辑这些编码(仅限小写字母)。如果您拥有完全相同数量的数据,这将是最简单的解决方案。但不是最小的。