Résumé des méthodes pour générer des nombres uniques non répétitifs en PHP

*文
Libérer: 2023-03-18 14:30:01
original
7940 Les gens l'ont consulté

Comment générer des nombres uniques et non répétitifs en PHP ? Par exemple, les commandes nécessitent souvent que nous générions un numéro unique. Dans des circonstances normales, le uniqid() fourni par PHP peut répondre aux besoins, mais en période de forte concurrence, nous avons besoin d'une meilleure solution pour générer des nombres uniques et non répétitifs. Cet article partagera un exemple de code, j'espère qu'il sera utile à tout le monde.

J'avais un projet e-commerce il y a quelque temps et j'avais besoin de générer un numéro de commande. La considération à l’époque était simple : prendre l’heure du système et ajouter un nombre aléatoire, ou utiliser la méthode uniqid(). Examinez attentivement la méthode ci-dessus. Lorsque le client achète une petite quantité, la possibilité de duplication de commande est nulle. Cependant, une duplication des numéros de commande générés pendant la période d'achat maximale est très probable.

Le premier type

return date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);
Copier après la connexion

Le deuxième type

return date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
Copier après la connexion

Le troisième 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);
Copier après la connexion

La quatrième méthode :

J'ai cherché en ligne et j'ai trouvé que l'idée de ce camarade de classe est plutôt bonne, redtamo. La méthode utilise des lettres anglaises, l'année, le mois, le jour, l'horodatage Unix, les microsecondes et les nombres aléatoires. La possibilité de duplication est considérablement réduite, ce qui est toujours très bon. L'utilisation des lettres est très représentative, une lettre correspond à une année, un total de 16 chiffres, ni plus, ni moins, 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));
?>
Copier après la connexion

Effet de génération :

A422694333616096
Copier après la connexion

Hélas, c'est dommage que cette méthode n'ait pas été utilisée dans le projet final. pas besoin de compliquer les choses, - -!

Les quatre méthodes ci-dessus sont tout le contenu partagé avec vous dans cet article. J'espère que vous l'aimerez.

Recommandations associées :

Nombre aléatoire PHP C nombre aléatoire étendu

Compréhension approfondie des nombres aléatoires basée sur le tutoriel php_PHP

Quelle est la bonne façon de générer un UUID avec PHP ?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal