Maison  >  Article  >  développement back-end  >  PHP crée une classe de numéros unique basée sur un identifiant auto-incrémenté

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

jacklove
jackloveoriginal
2018-06-08 23:04:302432parcourir

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 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. Soyez aussi court que possible
Utilisez des nombres pour. trouver le reste Traiter les lettres correspondantes pour créer des nombres plus courts

Principe de l'algorithme

1 Ajouter un préfixe personnalisé pour identifier

2. Le format utilise préfixe + lettres + chiffres Composition. , seuls N chiffres sont réservés aux nombres. Si le nombre dépasse le reste, des lettres sont utilisées pour calculer le reste

Par exemple :
id=1
Prefix=F
3 chiffres. sont réservés aux numéros
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 = &#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



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