Maison >développement back-end >tutoriel php >Méthode PHP pour créer une classe de numéros unique basée sur un identifiant auto-incrémenté

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

墨辰丷
墨辰丷original
2018-05-24 10:10:481531parcourir

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 = &#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

<?php
require &#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-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!

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