问题前言
PHP生成一串随机的数字,还是有几率会重复,为此写了下面这段代码来弥补这个问题。下面代码使用场景很多,有不足之处还望评论告知。
解决方案
/** * 生成18位随机不重复的订单号 * $length:随机数长度 */ function generateOrderNumber($length=4){ // 14位的日期(年月日时分秒) $date=trim(date('Ymdhis ',time())); // 初始化变量为0 $connt = 0; // 建一个新数组 $temp = array(); while($connt < $length){ // 在一定范围内随机生成一个数放入数组中 $temp[] = mt_rand(0, 9); //$data = array_unique($temp); // 去除数组中重复值用了“翻翻法”(就是用array_flip()把数组的key和value交换两次。这种做法比用array_unique()快得多) $data = array_flip(array_flip($temp)); // 将数组的数量存入变量count中 $connt = count($data); } // 为数组赋予新的键名 shuffle($data); // 数组转字符串 $str=implode(",", $data); // 替换掉逗号 $number=str_replace(',', '', $str); return $date.$number; }
调用示例
<?php // 商户订单号 $number= generateOrderNumber(); ?>
使用说明
请根据自己实际情况做相应修改