Maison >développement back-end >Problème PHP >Comment générer des numéros de série uniques en php
Comment générer des numéros de série uniques en PHP : 1. Générez des numéros de série uniques via "str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);" 2. Des fonctions telles que imploser et array_map génère des numéros de série uniques.
L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.1, ordinateur DELL G3.
Un résumé des méthodes permettant à PHP de générer des nombres uniques et non répétitifs
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.
Il y a quelque temps, il y avait un projet de commerce électronique qui nécessitait de générer un numéro de commande. La considération à cette époque était très 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.
Premier type
return date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);
Deuxième type
return date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
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);
Quatrième type Type :
J'ai cherché en ligne et j'ai trouvé que l'idée de ce camarade de classe est plutôt bonne, redtamo. Veuillez aller la vérifier pour plus de détails. Je vais donner un bref aperçu de cette méthode qui utilise les lettres anglaises, l'année et le mois. et microsecondes, nombres aléatoires, la possibilité de répétition est considérablement réduite, ce qui est quand même très bien. 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 générateur :
A422694333616096
Hélas, c'est dommage que cette méthode n'ait pas été utilisée dans le projet final, disant qu'il n'y avait pas besoin de faire si compliqué, - -!
Les quatre méthodes ci-dessus sont tout le contenu partagé avec vous dans cet article. J'espère que vous l'aimerez.
[Recommandé : Tutoriel vidéo 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!