PHP crée une classe de numéros unique basée sur un identifiant auto-incrémenté

黄舟
Libérer: 2023-03-05 19:16:02
original
1351 Les gens l'ont consulté


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.

Règles de création de numéros

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


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

Pré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 = &#39;&#39;;        while($pision){            
        $tmp = fmod($pision, 26); // 只使用26个大写字母
            $tmp = chr($tmp + 65);      // 转为字母
            $word .= $tmp;            $pision = floor($pision/26);
        }        if($word==&#39;&#39;){            $word = chr(65);
        }        // 生成数字部分
        $mod = $id % $base;        $digital = str_pad($mod, $num_length, 0, STR_PAD_LEFT);        
        $code = sprintf(&#39;%s-%s-%s&#39;, $prefix, $word, $digital);        return $code;

    }

} // class end?>
Copier après la connexion
Copier après la connexion

demo.php

Sortie :
<?phprequire &#39;IDCode.class.php&#39;;$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.&#39; = &#39;.IDCode::create($test_id, 3, &#39;F&#39;).&#39;<br>&#39;;
}?>
Copier après la connexion
Copier après la connexion

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
Copier après la connexion
Copier après la connexion



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

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



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. S'il y a plus de 10 chiffres, utilisez des lettres pour trouver le reste.

Par exemple :

. id=1

Prefix= F

Le numéro conserve 3 chiffres

, alors le numéro créé est :
F-A-001


Le code est la suivante :

IDCode.class.php

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 = &#39;&#39;;        while($pision){            
        $tmp = fmod($pision, 26); // 只使用26个大写字母
            $tmp = chr($tmp + 65);      // 转为字母
            $word .= $tmp;            $pision = floor($pision/26);
        }        if($word==&#39;&#39;){            $word = chr(65);
        }        // 生成数字部分
        $mod = $id % $base;        $digital = str_pad($mod, $num_length, 0, STR_PAD_LEFT);        
        $code = sprintf(&#39;%s-%s-%s&#39;, $prefix, $word, $digital);        return $code;

    }

} // class end?>
Copier après la connexion
Copier après la connexion

Sortie :

<?phprequire &#39;IDCode.class.php&#39;;$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.&#39; = &#39;.IDCode::create($test_id, 3, &#39;F&#39;).&#39;<br>&#39;;
}?>
Copier après la connexion
Copier après la connexion

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
Copier après la connexion
Copier après la connexion
Ce 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) !



É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