Maison > Article > développement back-end > Résumé des méthodes pour générer des nombres uniques non répétitifs en PHP
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);
Le deuxième type
return date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
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,'0',STR_PAD_LEFT);
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('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)); ?>
Effet de génération :
A422694333616096
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!