php生成订单号函数
收藏php生成订单号函数,方便日后使用。订单号生成很多种方式和方法,有按标志性规则的,有按业务划分的,有按订统一单生成器的,等等等等。但在众多方式中,离不开:安全性,唯一性。生成个:简短,支持高并发,安全唯一的,又包含业务规则的订单号,实在不容易。
一、摘录自:ShopNC 生成订单编号
/** * ShopNC 生成订单编号 * @return string */ function snOrder() { $recharge_sn = date('Ymd').substr( implode(NULL,array_map('ord',str_split(substr(uniqid(),7,13),1))) , -8 , 8); return $recharge_sn; }
样例:
string '2018011149985556' (length=16)
string '2018011197489748' (length=16)
解释:
//获取一个带前缀、基于当前时间微秒数的唯一ID。 var_dump(uniqid()); //string '5a5777a2f2eb8' (length=13) //获取变化频繁的后6位 var_dump(substr(uniqid(),7,13)); //string '2f2eb8' (length=6) //将字符串转换为数组,每段长度为1 var_dump(str_split(substr(uniqid(),7,13),1)); /*array (size=6) 0 => string '2' (length=1) 1 => string 'f' (length=1) 2 => string '2' (length=1) 3 => string 'e' (length=1) 4 => string 'b' (length=1) 5 => string '8' (length=1)*/ //使用array_map对数组每个值,都掉用ord()函数,返回相应字符的ASCII码值 var_dump(array_map('ord',str_split(substr(uniqid(),7,13),1))); /*array (size=6) 0 => int 50 1 => int 102 2 => int 51 3 => int 50 4 => int 97 5 => int 48*/ //传入null将数组数字在拼接成为一个数字字符串 var_dump(implode(NULL,array_map('ord',str_split(substr(uniqid(),7,13),1)))); //string '5010251509748' (length=13) //由于长度很难统一,从倒数第八位开始截取8位数 var_dump(substr(implode(NULL,array_map('ord',str_split(substr(uniqid(),7,13),1))),-8,8)); //string '51509748' (length=8)
二、摘录自:ECSHOP 得到新订单号
/** * ECSHOP 得到新订单号 * @return string */ function get_order_sn() { //选择一个随机的方案 mt_srand((double) microtime() * 1000000); return date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT); }
样例:
string '2018011181845' (length=13)
string '2018011120993' (length=13)
解释:
//mt_srand() 播种 Mersenne Twister 随机数生成器 //自 PHP 4.2.0 起,不再需要用 srand() 或 mt_srand() 函数给随机数发生器播种,现已自动完成 mt_srand((double) microtime() * 1000000); //生成1-99999的随机数 var_dump(mt_rand(1, 99999)); //string '5097' (length=4) //不足5位的随机数,就在前面补0。STR_PAD_LEFT在左端填充 var_dump(str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT)); //string '05097' (length=5)
如果日后开发过程中发现新的,再摘录接着补充进去。
原创文章,转载请注明出处:https://www.weizhixi.com/article/57.html