时间:2021-07-01 10:21:17 帮助过:48人阅读
最多10万条?
也就是说自增的id为1到99999了
按5位补齐前导的0,即 00001到99999
在其后附加个位(当然是你指定的)为 000011 到 999999
然后做 base64 编码
echo base64_encode('000011'), PHP_EOL;echo base64_encode('999999'), PHP_EOL;/*MDAwMDExOTk5OTk5*/必要的话,在对结果做一下“凯撒加密”(字典移位)
用自增ID做种子是很不错的选择,因为它10w的范围内是唯一的 而截取八位后的当前时间戳不是
但是这样是不是也要先存入,拿到ID酸楚码再更新至数据库? 能否查数据库或者写数据库之前拿到码 或者在insert的时候插入符合要求的码
既然是变形自增id,也就没有必要存到库中了吧?
做一下逆运算不就还原了吗?
用自增ID做种子是很不错的选择,因为它10w的范围内是唯一的 而截取八位后的当前时间戳不是
但是这样是不是也要先存入,拿到ID酸楚码再更新至数据库? 能否查数据库或者写数据库之前拿到码 或者在insert的时候插入符合要求的码
base64_encode(base_convert(time(), 10, 36));把当前时间转化为36进制(8位数),在用base64_encode加密可以不,确保唯一了,也不用查数据库。
用时间也是一个办法,不过光 time 是不行的。
谁能保证两个请求不在同一秒钟内得到响应呢?
或许这样可行
echo base_convert(str_replace('.', '', $_SERVER['REQUEST_TIME_FLOAT']), 10, 36);
但精确到毫秒,对于高性能的服务器可能还是个问题
define('ONLY','FDSAR2432FDS');
echo base64_encode(ONLY.'000011'), PHP_EOL;
echo base64_encode(ONLY.'999999'), PHP_EOL;