Home  >  Article  >  Backend Development  >  Summary of methods for generating unique non-repeating numbers in PHP

Summary of methods for generating unique non-repeating numbers in PHP

*文
*文Original
2017-12-26 13:56:597922browse

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,&#39;0&#39;,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(&#39;A&#39;, &#39;B&#39;, &#39;C&#39;, &#39;D&#39;, &#39;E&#39;, &#39;F&#39;, &#39;G&#39;, &#39;H&#39;, &#39;I&#39;, &#39;J&#39;);
$orderSn = $yCode[intval(date(&#39;Y&#39;)) - 2011] . strtoupper(dechex(date(&#39;m&#39;))) . date(&#39;d&#39;) . substr(time(), -5) . substr(microtime(), 2, 5) . sprintf(&#39;%02d&#39;, 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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn