订单号生成函数

以下是我在做电商系统用的订单号生成函数 ::/** * 订单序列生成 16位 * $type支付/提取类型 *  $usertype用户类型 *  $oid 订单自增长 */public function getOrderNo($type,$usertype,$oid){    $password = array(0 => array(0, 5, 1, 2, 6, 4, 3, 8, 9, 7),        1 => array(9, 8, 7, 6, 5, 4, 3, 2, 1, 0),        2 => array(4, 3, 2, 1, 0, 5, 6, 7, 8, 9),        3 => array(5, 6, 7, 8, 9, 0, 1, 2, 3, 4),        4 => array(9, 0, 8, 1, 7, 3, 6, 4, 5, 2),        5 => array(7, 2, 6, 4, 5, 1, 8, 0, 9, 3),        6 => array(6, 7, 8, 9, 5, 4, 3, 2, 1, 0),        7 => array(5, 9, 7, 8, 3, 4, 2, 6, 1, 0),    );    $ret = date(‘ymd‘) . $type . $usertype;    $oid = str_pad($oid, 8, "0", STR_PAD_LEFT);    for ($i = 0; $i < 8; $i++) {        $oid[$i] = $password[$i][$oid[$i]];    }    $ret .= $oid;    return $ret;

}
时间: 2024-10-10 21:36:07

订单号生成函数的相关文章

订单号生成规则

前阵子,公司有个电子商务项目,需要生成订单号.当时的考虑很简单,取系统时间加上随机数,或者使用 uniqid() 方法.我们都知道,订单号最基本的要求就是唯一,这个条件必须满足.仔细考虑下上述方法,在顾客购买量少的情况下,订单重复的可能性为零,但是在购买高蜂期生成的订单号重复是很有可能发生的.所以上述方法不可靠,有待强化.在网上找了一番,发现这位同学的想法挺不错的,redtamo,具体的请稳步过去看看,我作简要概述,该方法用上了英文字母.年月日.Unix 时间戳和微秒数.随机数,重复的可能性大大

Thinkphp 生成订单号小案例

Thinkphp 生成订单号小案例小伙伴们在日常的商城项目开发中,都会遇到订单号生成的问题,今天呢思梦PHP就带领大家去解读一下生成订单号的问题!首先,订单号我们要明确它有有3个性质:1.唯一性 2.不可推测性 3.效率性,唯一性和不可推测性不用说了,效率性是指不能频繁的去数据库查询以避免重复.况且满足这些条件的同时订单号还要足够的短.不知道小伙伴们在日常的项目中是否也和我一样去思考过生成订单的一些小问题,可能你也会说,这些东西不用想的那么复杂,其实呢,小编也是同意大家的看法,但是殊不知我们做程

生成订单号

生成订单号,最大的问题是要考虑高并发的时候.在网上找的一些方案往往在这种情况下难以适用,比如,查询订单序列最大数,根据系统时间生成等. 再考虑另一种可行的方案:数据库递增序列,没错,确实能解决高并发的问题,但在集群等情况下对数据库压力比较大,而且有些数据库对递增序列没有很好的支持,同时递增序列的位数是一直增加的,也有可能会超出数据库表字段限制. 最好的方案是用java的uuid工具类生成唯一的字符串,然后再取这个字符串对象的hashcode值,因为字符串的值是唯一的,它的hashcode也是唯一

插入订单并且输出订单号的sql存储过程

--插入订单-- create proc InsertOrders ( @OrderNumber varchar(300), @OrderState varchar(30), @OrderType varchar(30), @OrderTime DateTime, @OrderFirm varchar(300), @OrderMoney decimal(8,2), @SendWayMoney decimal(8,2), @RegisterId int, @CoalitionOrdersId in

php生成唯一订单号

支持更改长度/** * 生成唯一订单号 * */ function build_order_no(){ return date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8); }

两个PHP方面的东西,超过2038的时间和唯一订单号算法

2014年10月01日  php开发 1条评论 阅读264次 DateTime::format 被设计成不受外部设置影响(面向对象就应该如此)所以无论你如何改变环境参数 date_default_timezone ,都不会影响输出结果要想改变 DateTime::format 的时区设置,需要向 DateTime::setTimezone 传入一个时区对象 DateTimeZone 1 $d = new DateTime('@2444486400'); 2 $d->setTimezone(new

php:订单号和时区

1.php制作订单号 $data['orderid'] = date("YmdHis") . settype(rand(100000, 999999), string) ; 2.php时区 date_default_timezone_set('Asia/Shanghai');//'Asia/Shanghai' $data['servertime'] = strtotime($this->_post('servertime')); $data['createtime'] = tim

不重复订单号生成规则

偶尔在网上看到的,相对比较好的c#端订单号生成规则 public class BillNumberBuilder{ private static object locker = new object(); private static int sn = 0; public static string NextBillNumber(){ lock(locker){ if(sn == 9999999999) sn = 0; else sn++; return DateTime.Now.ToStrin

订单号创建并发问题

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading; 6 7 namespace Qxun.Framework.Utility 8 { 9 public class CreateOrderNo 10 { 11 /// <summary> 12 /// 订单格式:时间加随机数+线程ID 13 /// 因为像并发或