Heim  >  Artikel  >  Backend-Entwicklung  >  Zusammenfassung der Methoden zum Generieren eindeutiger, sich nicht wiederholender Zahlen in PHP

Zusammenfassung der Methoden zum Generieren eindeutiger, sich nicht wiederholender Zahlen in PHP

*文
*文Original
2017-12-26 13:56:597912Durchsuche

Wie generiert man in PHP eindeutige und sich nicht wiederholende Zahlen? Bei Bestellungen müssen wir beispielsweise häufig eine eindeutige Nummer generieren. Unter normalen Umständen kann die von PHP bereitgestellte uniqid() die Anforderungen erfüllen, aber in Zeiten hoher Parallelität benötigen wir eine bessere Lösung, um eindeutige und sich nicht wiederholende Zahlen zu generieren. In diesem Artikel wird Beispielcode vorgestellt. Ich hoffe, er ist für alle hilfreich.

Ich hatte vor einiger Zeit ein E-Commerce-Projekt und musste eine Bestellnummer generieren. Die damalige Überlegung war sehr einfach: Nehmen Sie sich die Systemzeit und fügen Sie eine Zufallszahl hinzu oder verwenden Sie die Methode uniqid (). Überlegen Sie sich die obige Methode sorgfältig, wenn der Kunde eine kleine Menge kauft. Es ist jedoch sehr wahrscheinlich, dass es zu Duplikaten von Bestellnummern kommt, die während der Hauptkaufzeit generiert werden.

Der erste Typ

return date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);

Der zweite Typ

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

Der dritte Typ

//生成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);

Die vierte Methode:

Ich habe online gesucht und festgestellt, dass die Idee dieses Klassenkameraden ziemlich gut ist. Schauen Sie sich bitte die Details an Die Methode verwendet englische Buchstaben, Jahr, Monat, Tag, Unix-Zeitstempel, Mikrosekunden und Zufallszahlen. Die Möglichkeit einer Duplizierung ist stark reduziert, was immer noch sehr gut ist. Die Verwendung von Buchstaben ist sehr repräsentativ, ein Buchstabe entspricht einer Jahreszahl, insgesamt 16 Ziffern, nicht mehr und nicht weniger, 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));
?>

Generierungseffekt:

A422694333616096

Leider ist es schade, dass diese Methode im endgültigen Projekt nicht verwendet wurde Es ist nicht nötig, es so kompliziert zu machen, - -!

Die oben genannten vier Methoden sind alle Inhalte, die in diesem Artikel mit Ihnen geteilt werden. Ich hoffe, dass sie Ihnen gefallen werden.

Verwandte Empfehlungen:

PHP-Zufallszahl C erweiterte Zufallszahl

Detailliertes Verständnis von Zufallszahlen basierend auf dem php_PHP-Tutorial

Wie generiert man UUID mit PHP richtig?

Das obige ist der detaillierte Inhalt vonZusammenfassung der Methoden zum Generieren eindeutiger, sich nicht wiederholender Zahlen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn