Home >Backend Development >PHP Tutorial >Summary of methods for generating unique non-repeating numbers in PHP
How does PHP generate a unique and non-repeating number? Many times, for example, orders require us to generate a unique number. Under normal circumstances, the uniqid() provided by PHP can meet the needs, but in times of high concurrency, we need a better solution to generate unique and non-repeating numbers. This article will share example code, I hope it will be helpful to everyone.
There was an e-commerce project a while ago that required generating an order number. The consideration at the time was simple, take the system time and add a random number, or use the uniqid() method. Carefully consider the above method. When the customer purchases a small amount, the possibility of order duplication is zero. However, duplication of order numbers generated during the peak purchase period is very likely to occur.
First type
return date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);
Second type
return date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
Third type
//生成24位唯一订单号码,格式:YYYY-MMDD-HHII-SS-NNNN,NNNN-CC,其中:YYYY=年份,MM=月份,DD=日期,HH=24格式小时,II=分,SS=秒,NNNNNNNN=随机数,CC=检查码 @date_default_timezone_set("PRC"); while(true){ //订购日期 $order_date = date('Y-m-d'); //订单号码主体(YYYYMMDDHHIISSNNNNNNNN) $order_id_main = date('YmdHis') . rand(10000000,99999999); //订单号码主体长度 $order_id_len = strlen($order_id_main); $order_id_sum = 0; for($i=0; $i<$order_id_len; $i++){ $order_id_sum += (int)(substr($order_id_main,$i,1)); } //唯一订单号码(YYYYMMDDHHIISSNNNNNNNNCC) $order_id = $order_id_main . str_pad((100 - $order_id_sum % 100) % 100,2,'0',STR_PAD_LEFT);
Fourth type:
After searching on the Internet, I found that this classmate’s idea is quite good, redtamo. Please go and have a look at the details. I will give a brief overview. This method uses English letters. , year, month, day, Unix timestamp and microseconds, random numbers, the possibility of repetition is greatly reduced, which is still very good. The use of letters is very representative, one letter corresponds to a year, a total of 16 digits, no more, no less, haha.
<?php $yCode = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'); $orderSn = $yCode[intval(date('Y')) - 2011] . strtoupper(dechex(date('m'))) . date('d') . substr(time(), -5) . substr(microtime(), 2, 5) . sprintf('%02d', rand(0, 99)); ?>
Generation effect:
A422694333616096
Alas, it’s a pity that this method was not used in the final project, saying that it was unnecessary. complex, - -!
The above four methods are all the content shared with you in this article. I hope you will like it.
Related recommendations:
PHP random number C extended random number
Based on in-depth understanding of php random numbers_PHP tutorial
What is the correct posture for PHP to generate UUID?
The above is the detailed content of Summary of methods for generating unique non-repeating numbers in PHP. For more information, please follow other related articles on the PHP Chinese website!