如何编码字符串内的序列号使用PHP


How to encode strings inside serial number using PHP?

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

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

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

基数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位。