Heim  >  Artikel  >  Backend-Entwicklung  >  PHP erstellt eine eindeutige Zahlenklasse basierend auf einer automatisch inkrementierten ID

PHP erstellt eine eindeutige Zahlenklasse basierend auf einer automatisch inkrementierten ID

黄舟
黄舟Original
2017-02-17 09:46:231294Durchsuche


Während des Entwicklungsprozesses verwenden unsere Datentabellen im Allgemeinen sich selbst erhöhende Zahlen als ID-Primärschlüssel, und ID ist ein numerischer Typ, der nicht leicht zu verstehen ist. Nachdem wir die ID gemäß einem bestimmten Format in eine Zahl umgewandelt haben, ist es anhand der Zahl leicht zu erkennen, was der Inhalt darstellt.

Zum Beispiel die Bestelltabellen-ID=20160111197681234 Wir wissen jedoch nicht, ob diese ID die ID der Bestelltabelle ist, wenn sie konvertiert wird Zur Nummer O-20160111197681234 ist es sehr schwierig zu erkennen, dass es sich um einen Datensatz der Bestelltabelle handelt, und kann dann anhand der ID in der Bestelltabelle gesucht werden.

Regeln für die Nummernerstellung

1. Mit automatisch inkrementierender ID generieren, um Eindeutigkeit sicherzustellen

So kurz wie möglich

Sie können den Rest der Zahlen verwenden, um Buchstaben zu entsprechen, um eine kürzere Zahl zu erstellen


Algorithmusprinzip

1. Fügen Sie ein benutzerdefiniertes Präfix hinzu, um

2. Das Format besteht aus Präfix + Buchstaben + Zahlen. Wenn es mehr als 10 Ziffern gibt, werden Buchstaben verwendet, um den Rest zu finden:

id=1

Präfix = F

Die Nummer behält 3 Ziffern

, dann lautet die erstellte Nummer:
F-A-001


Die Der Code lautet wie folgt:

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?>

Ausgabe:

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

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

Quellcode-Download-Adresse: Zum Anzeigen klicken

Während des Entwicklungsprozesses verwenden unsere Datentabellen im Allgemeinen selbst- Fügen Sie eine Zahl als Primärschlüssel der ID hinzu, und die ID ist numerisch, was nicht leicht zu verstehen ist. Nachdem wir die ID gemäß einem bestimmten Format in eine Zahl umgewandelt haben, ist es anhand der Zahl leicht zu erkennen, was der Inhalt darstellt. Zum Beispiel die Bestelltabellen-ID=

20160111197681234

Wir wissen jedoch nicht, ob diese ID die ID der Bestelltabelle ist, wenn sie konvertiert wird Zur Nummer

O-20160111197681234

ist es sehr schwierig zu erkennen, dass es sich um einen Datensatz der Bestelltabelle handelt, und kann dann anhand der ID in der Bestelltabelle gesucht werden. Regeln für die Nummernerstellung

1. Mit automatisch inkrementierender ID generieren, um Eindeutigkeit sicherzustellen

So kurz wie möglich

Sie können die restlichen Zahlen verwenden, um Buchstaben zu entsprechen, um eine kürzere Zahl zu erstellen


Algorithmusprinzip

1. Fügen Sie ein benutzerdefiniertes Präfix hinzu, um
2. Das Format besteht aus Präfix + Buchstaben + Zahlen. Wenn es mehr als 10 Ziffern gibt, werden Buchstaben verwendet, um den Rest zu finden:

id=1

Präfix= F

Die Nummer behält 3 Ziffern

, dann lautet die erstellte Nummer:

F-A-001



Die Der Code lautet wie folgt:

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?>
Ausgabe:

Das Obige ist der Inhalt von PHP, das eine eindeutige Zahlenklasse basierend auf der sich selbst erhöhenden ID erstellt . Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!
<?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;;
}?>

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn