因为项目需求,需要生成订单编号的东西,而订单编号上面的统计信息有必要隐藏起来,而考虑到项目中很多地方也需要生成唯一随机字串,使用时间一秒钟最多应用毫秒数来生成1000个唯一编号,而使用过程中,订单编号可能多,使我有了下面的想法:
1、所有串都是26个字母+10个数字共36个不同字符来组成;
2、日期可以这么考虑,十年以上的数据存留已经够用了,不知道十年后公司还存不存在,所以36个来代表年份够用了,直接取余,月、日、小时也足够用36个字符来标识,同样取余;
3、分钟有60分,超过36,用两位来标识:十位、各位,秒同样!这样一共占据了8位;
4、剩下6位用累加统计来表示,使用共享内存进行累加;
上面4条就能保证在一分钟内,能生成99万个不同的字串,并且36位字串的组成可以随机(后面代码将看到效果);如果需求的字串长于14位,则在末尾加上利用随机数读取的字符串,这样更能保证获得的字串唯一;
直接上代码
<?php
class UniqueTools
{
private static $key = 39527; // the key of shm
private static $memsize = 8; // size of shm by byte
private static $perm = 0666; // promission
private static $offset = 0; // offset of shm,0 is the first a