Maison > Article > développement back-end > PHP crée une classe de numéros unique basée sur un identifiant auto-incrémenté
Pendant le processus de développement, nos tables de données utilisent généralement des nombres auto-croissants comme clé primaire d'identification, 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, la table de commande id=20160111197681234 Nous ne savons pas que cet identifiant est l'identifiant de la table de commande simplement en regardant l'identifiant. Cependant, s'il est converti. au numéro O-20160111197681234, c'est très difficile de voir qu'il s'agit d'un enregistrement de la table de commande, et ensuite il peut être recherché dans la table de commande en fonction de l'identifiant.
1. Unique
Générer à l'aide d'un identifiant à incrémentation automatique pour garantir l'unicité
2. 🎜 >Vous pouvez utiliser le reste des chiffres pour correspondre aux lettres afin de créer un nombre plus court
<.>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=1Préfixe = F
Le numéro conserve 3 chiffres
, alors le numéro créé est :
F-A-001
Le code est la suivante :
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
Sortie :<?phprequire '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>'; }?>
1 = F-A-0019 = F-A-00910 = F-A-01099 = F-A-099100 = F-A-100999 = F-A-9991000 = F-B-0001009 = F-B-0092099 = F-C-0993999 = F-D-9999999 = F-J-99914999 = F-O-99999999 = F-VD-999
Adresse de téléchargement du code source : Cliquez pour voir Pendant le processus de développement, nos tables de données utilisent généralement Ajouter un nombre comme clé primaire de l'identifiant, et l'identifiant est numérique, ce qui n'est pas facile à comprendre. Après avoir converti l'identifiant en numéro selon un certain format, il est facile de savoir ce que représente le numéro.
Par exemple, la table de commande id=
20160111197681234 Nous ne savons pas que cet identifiant est l'identifiant de la table de commande simplement en regardant l'identifiant. Cependant, s'il est converti. au numéro O-20160111197681234, il est très difficile de voir qu'il s'agit d'un enregistrement de la table de commande, et ensuite il peut être recherché dans la table de commande en fonction de l'identifiant.
Règles de création de numéros
2. 🎜 >Vous pouvez utiliser le reste des chiffres pour correspondre aux lettres afin de créer un nombre plus court
Principe de l'algorithme
Par exemple :
. id=1Prefix= F
Le numéro conserve 3 chiffres, alors le numéro créé est :
F-A-001
Le code est la suivante :
demo.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?>
Sortie :
<?phprequire '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>'; }?>
1 = F-A-0019 = F-A-00910 = F-A-01099 = F-A-099100 = F-A-100999 = F-A-9991000 = F-B-0001009 = F-B-0092099 = F-C-0993999 = F-D-9999999 = F-J-99914999 = F-O-99999999 = F-VD-999Ce qui précède est le contenu de PHP créant une classe de nombres unique basée sur l'ID auto-croissant. Pour plus de contenu connexe, veuillez prêter attention au site Web PHP chinois (www.php.cn) !