2

我需要使用 PHP 生成序列号,格式如下“ASDK3-JDAL9-24SFT-J5D8R-D4AL9”。一个要求是我需要在这个序列号中以某种方式编码时间戳和电子邮件地址,然后在需要时检索它们。有什么简单的方法可以做到这一点?

编辑 更具体地说,序列号中允许的数字和字母需要是 0-9 和 AZ。为了使其更通用,我需要在该序列号中编码 2 个短字符串。例如,日期“04/03/2013”​​和一个数字“324”或电子邮件地址(如果可能)。该字符串不需要在序列号中是人类可读的,但我需要能够在需要时检索它们。

4

1 回答 1

0

让我们使用 base32 编码做一些简单的数学运算。您有 36 个字符,但我们假设为 32,因为我们正在进行粗略估计。

Base 32 增加了 60% 的开销。如果要存储 8 个字符的日期和 3 个字符的数量,您至少需要:( 8 + 3 ) * 1.6 = 18此数据的字符。您的密钥长度为 25 个字符,因此您会7 / 1.6 = 4留下一些随机字符。如果你的随机键有 64 个字符,你就有64^4 = 16 million可能。

PHP 没有可用的原生 base 32 函数,但您可以自己编写一个,大纲与 base64 相同,只是一次取 7 位而不是 8 位。

于 2013-05-23T22:08:17.957 回答