收藏php生成订单号函数,方便日后使用。订单号生成很多种方式和方法,有按标志性规则的,有按业务划分的,有按订统一单生成器的,等等等等。但在众多方式中,离不开:安全性,唯一性。生成个:简短,支持高并发,安全唯一的,又包含业务规则的订单号,实在不容易。
一、摘录自:ShopNC 生成订单编号/**
*ShopNC生成订单编号
*@returnstring
*/
functionsnOrder(){
$recharge_sn=date('Ymd').substr(implode(NULL,array_map('ord',str_split(substr(uniqid(),7,13),1))),-8,8);
return$recharge_sn;
}
样例:
string '011149985556' (length=16)
string '011197489748' (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=>int50
1=>int102
2=>int51
3=>int50
4=>int97
5=>int48*/
//传入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得到新订单号
*@returnstring
*/
functionget_order_sn(){
//选择一个随机的方案
mt_srand((double)microtime()*1000000);
returndate('Ymd').str_pad(mt_rand(1,99999),5,'0',STR_PAD_LEFT);
}
样例:
string '011181845' (length=13)
string '011120993' (length=13)
解释://mt_srand()播种MersenneTwister随机数生成器
//自PHP4.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)
如果日后开发过程中发现新的,再摘录接着补充进去。
原创文章,转载请注明出处:/article/57.html