用户取餐时,要用取餐码领取,生成订单是需要生成不可重复取餐码。
取餐码格式为:
生成应该格式比较容易生成,多个用户生成的时候可能会重复。
$perfix = 1;//使用USER_ID做前缀
//去当前毫秒时间戳
$time = explode(" ", microtime());
$time = $time[1] . ($time[0] * 1000);
$time2 = explode(".", $time);
$time = $time2[0];
$number = $time + mt_rand(0, 99);
echo $perfix.strtoupper(base_convert($number,10,36));//转成36进制
看了下楼上的答案,都很棒,很正确,但是我们好像被作者的问题限制住了思维,因为我发现他的核心需求是生成取餐码,并非生成为随机字符串。。
一:不需要保密的方案
1.按照序号不行吗??
2.用户用这个这么长的编码不好记,而且如果不是扫描的话,服务员输入的时候也不好输入啊。。。
3.如果用序号有好处就是方便统计。店长看了下最后一单的序号是100,那肯定今天又100个人点餐了,不用在单独开发功能。
具体方法,不多说了就举个现实的例子。
肯定看过电影,电影票的取票码咋弄的??年份加月加日再加一个序号。。。既能提醒是哪一天,还能向使用者传递出我这个电影今天的销量如何。
二:要保密
同样的道理。。。年+随机串+随机串+日+随机串+每天的序号+随机串
最后补充一点就是用序号的话就是有一点要注意,后台的服务一定不能是异步的修改数据库。
如果觉得回答是认真的,请采纳
理论上,哈希是很难相遇的,那么可以参考这样 $code = md5(time());抱歉,现在补上,因为是限制十二位数的,所以不妨改动一下
$code = '';
$length = 12;
$str = md5(time()).md5($userid);
for($i = 0;$i < $length;$i++ ){
$index = rand(0,strlen($str));
$code .= $str[$index];
}
echo $code;
可以参考生成唯一用户随机uid的方案
1.先生成大量取餐码到数据库 并生成取餐码队列
2.数据库对取餐码做唯一索引
3.定时检查取餐码队列长度,长度不够时及时新增队列
4.用户取餐时,从队列中pop一个取餐码即可
2 回答1.6k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答988 阅读✓ 已解决
2 回答1.1k 阅读
1 回答934 阅读
1 回答890 阅读
1 回答885 阅读
可以把userid或者其他唯一性数据加密加到前面~