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

*文
Release: 2023-03-18 14:30:01
Original
7921 people have browsed it

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);
Copy after login

Second type

return date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
Copy after login

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);
Copy after login

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));
?>
Copy after login

Generation effect:

A422694333616096
Copy after login

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!

Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!