Maison  >  Article  >  développement back-end  >  Créez une classe de numéros unique grâce à un identifiant auto-incrémenté en php

Créez une classe de numéros unique grâce à un identifiant auto-incrémenté en php

jacklove
jackloveoriginal
2018-06-20 17:12:263178parcourir

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, 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 Ajouter 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, 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
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 = &#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?>

demo.php

<?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;;
}?>
Sortie :

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 des nombres auto-croissants car id est la clé primaire et id est numérique, ce qui n'est pas facile à comprendre. Après avoir converti l’ID en un nombre dans un certain format, il est facile de savoir ce que représente le nombre.

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. Pour les nombres excédentaires, 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 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?>
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;;
}?>

Cet article explique comment créer une classe de nombres unique via l'identifiant d'incrémentation automatique en php. Pour plus de contenu connexe, veuillez prêter attention au. php site chinois.

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
Recommandations associées :

Explication sur la sortie de page optimisée en php, compatible avec des exemples d'accès des robots des moteurs de recherche


Par php Appelez ffmpeg pour obtenir des informations vidéo


Utilisez MySQL pour déterminer si le point se trouve dans la zone de polygone spécifiée

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!

Déclaration:
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