Cet article présente principalement les connaissances pertinentes de PHP pour créer une classe de nombres unique basée sur l'ID auto-croissant. A une très bonne valeur de référence. Jetons un coup d'œil avec l'éditeur ci-dessous
Pendant le processus de développement, nos tables de données utilisent généralement des nombres auto-incrémentés comme clé primaire d'id, et id est un type numérique, ce qui n'est pas facile à comprendre. Après avoir converti l'ID en numéro selon un certain format, il est facile de savoir ce que le contenu représente en fonction du numéro.
Par exemple, l'identifiant de la table de commande=20160111197681234. Rien qu'en regardant l'identifiant, nous ne savons pas que cet identifiant est l'identifiant de la table de commande, mais il est converti en numéro O-20160111197681234, il est facile de voir qu'il s'agit d'un enregistrement de la table de commande, puis il peut être recherché dans la table de commande en fonction de l'identifiant.
Règles de création de numéros
1 Unique
est généré à l'aide d'un identifiant à incrémentation automatique, Unicité garantie
2. Le plus court possible
peut être traité en utilisant le reste du numéro correspondant à la lettre pour créer un numéro plus court.
Principe de l'algorithme
1. Ajoutez un préfixe personnalisé pour identifier
2. Le format est composé de préfixe + lettres + chiffres. Seuls N chiffres sont réservés aux nombres. Pour les nombres en excès, utilisez la méthode du reste des nombres et utilisez des lettres pour correspondre
. Par exemple :
id =1
Prefix=F
Le numéro conserve 3 chiffres
, alors le numéro créé est : F-A-001
Le code est le suivant :
IDCode.class.PHP
<?php /** * php 根据自增id创建唯一编号类 * Date: 2016-11-27 * Author: fdipzone * Ver: 1.0 * * Func * Public create 创建编号 */ class IDCode{ // class start /** * 创建编号 * @param Int $id 自增id * @param Int $num_length 数字最大位数 * @param String $prefix 前缀 * @return String */ public static function create($id, $num_length, $prefix){ // 基数 $base = pow(10, $num_length); // 生成字母部分 $pision = (int)($id/$base); $word = ''; while($pision){ $tmp = fmod($pision, 26); // 只使用26个大写字母 $tmp = chr($tmp + 65); // 转为字母 $word .= $tmp; $pision = floor($pision/26); } if($word==''){ $word = chr(65); } // 生成数字部分 $mod = $id % $base; $digital = str_pad($mod, $num_length, 0, STR_PAD_LEFT); $code = sprintf('%s-%s-%s', $prefix, $word, $digital); return $code; } } // class end ?>
demo.php
<?php require 'IDCode.class.php'; $test_ids = array(1,9,10,99,100,999,1000,1009,2099,3999,9999,14999,99999); foreach($test_ids as $test_id){ echo $test_id.' = '.IDCode::create($test_id, 3, 'F').'<br>'; } ?>
Sortie :
1 = F-A-001 9 = F-A-009 10 = F-A-010 99 = F-A-099 100 = F-A-100 999 = F-A-999 1000 = F-B-000 1009 = F-B-009 2099 = F-C-099 3999 = F-D-999 9999 = F-J-999 14999 = F-O-999 99999 = F-VD-999
Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.
Recommandations associées :
PHPComment localiser la cause de la panne via strace
PHPUtiliser file_get_contents pour envoyer la fonction de requête http est simple
PHP+MySQL élevé transaction de verrouillage simultané Résolution de problèmes
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!