Heim  >  Artikel  >  Backend-Entwicklung  >  So erreichen Sie eine nicht doppelte Kodierung in PHP

So erreichen Sie eine nicht doppelte Kodierung in PHP

藏色散人
藏色散人Original
2021-12-16 09:25:102498Durchsuche

So erreichen Sie eine nicht duplizierte Kodierung in PHP: 1. Erstellen Sie eine PHP-Beispieldatei. 2. Führen Sie eine Hexadezimalkonvertierung durch. 3. Erhalten Sie die Dezimalzahl über die Datenbank und stellen Sie sicher, dass die Zahl eindeutig ist.

So erreichen Sie eine nicht doppelte Kodierung in PHP

Die Betriebsumgebung dieses Artikels: Windows 7-System, PHP-Version 7.4, Dell G3-Computer.

Wie erreicht man eine nicht doppelte Kodierung in PHP?

PHP-Implementierung zum Generieren eindeutiger Nummern (36-stellige, sich nicht wiederholende Nummern):

Wenn wir große Datenmengen nummerieren möchten und die Nummer eine Begrenzung der Ziffernzahl hat, z. B. eine 5-stellige Lizenz Kennzeichen, 10-stelliges Kfz-Kennzeichen Für eine bestimmte Zertifikatsnummer, Auftragsseriennummer, Kurz-URL usw. können wir Hexadezimal verwenden, um eine eindeutige Zahl zu berechnen, die der Anzahl der Ziffern entspricht.

Wir verwenden 0-Z (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ), um jeweils die Werte 0-35 darzustellen, beispielsweise steht der Buchstabe Z für 35. In diesem Fall möchte ich eine 5-stellige Zahl erhalten. Die maximale Informationsmenge beträgt 36 hoch 36^5 = 60466176, d. h. die maximale 5-stellige Zahl entspricht einer Dezimalzahl: 60466176 .

Zu Demonstrationszwecken gehen wir in diesem Artikel davon aus, dass ein Club einen Stapel 10-stelliger Mitgliedskartennummern ausgibt. Die Mitgliedskartennummer besteht aus einer 3-stelligen Stadtnummer + einem 5-stelligen Kartennummerncode + einem 2-stelligen Code Code prüfen. Die Stadtnummer wird durch die Vorwahl dargestellt. Die 5-stellige Kartennummer besteht aus einer 36-stelligen Kartennummer. Der Zweck des Schecks Der Code dient der Überprüfung der Kartennummer. In diesem Fall entspricht die von uns generierte 10-stellige Kartennummer maximal mehr als 60 Millionen Mitgliedskartennummern und ist eine eindeutige Kartennummer, die sich nicht wiederholt.

PHP-Implementierung

Wir verwenden PHP, um Dezimalzahlen in Hexadezimalzahlen umzuwandeln.

class Code { 

    //密码字典 

    private $dic = array( 

        0=>'0',    1=>'1', 2=>'2', 3=>'3', 4=>'4', 5=>'5', 6=>'6', 7=>'7', 8=>'8',     

        9=>'9', 10=>'A',  11=>'B', 12=>'C', 13=>'D', 14=>'E', 15=>'F',  16=>'G',  17=>'H',     

        18=>'I',19=>'J',  20=>'K', 21=>'L',  22=>'M',  23=>'N', 24=>'O', 25=>'P', 26=>'Q',     

    27=>'R',28=>'S',  29=>'T',  30=>'U', 31=>'V',  32=>'W',  33=>'X', 34=>'Y', 35=>'Z' 

    ); 

 

 

    public function encodeID($int, $format=8) { 

        $dics = $this->dic; 

        $dnum = 36; //进制数 
        $arr = array (); 

        $loop = true; 

        while ($loop) { 

            $arr[] = $dics[bcmod($int, $dnum)]; 

            $int = bcp($int, $dnum, 0); 

            if ($int == '0') { 

                $loop = false; 

            } 

        } 

        if (count($arr) < $format) 

            $arr = array_pad($arr, $format, $dics[0]); 

 

        return implode(&#39;&#39;, array_reverse($arr)); 

    } 

 

    public function decodeID($ids) { 

        $dics = $this->dic; 

        $dnum = 36; //进制数 

        //键值交换 
        $dedic = array_flip($dics); 

        //去零 
        $id = ltrim($ids, $dics[0]); 

        //反转 
        $id = strrev($id); 

        $v = 0; 

        for ($i = 0, $j = strlen($id); $i < $j; $i++) { 

            $v = bcadd(bcmul($dedic[$id { 

                $i } 

            ], bcpow($dnum, $i, 0), 0), $v, 0); 

        } 

        return $v; 

    } 
}

Wir definieren die Code-Klasse und definieren zunächst das Passwortwörterbuch, dh die Werte, die 0-Z entsprechen. Der Parameter $int in der Methode encodeID($int, $format) repräsentiert die Zahl und $format stellt die Länge der Ziffern dar, zum Beispiel bedeutet encodeID(123456789, 5) die Konvertierung der Zahl 123456789 in eine 5-stellige 36-stellige Zahl, und die Methode decodeID($ids) wird verwendet, um die 36-stellige Zahl in eine Dezimalzahl umzuwandeln .

Wir können die Kartennummer wie folgt generieren:

$code = new Code(); 

$card_no = $code->encodeID(888888,5);

Wie oben können wir eine 5-stellige Kartennummer erhalten, die tatsächlich die Mitgliedsnummer der Kartennummer 888888 (6 Achter) darstellt, und die tatsächliche Umrechnung ist eine 5 -stellige Nummer :0J1VC. Als nächstes fügen wir die Stadtnummer und den Prüfcode hinzu. Die Stadtnummer wurde definiert und der Prüfcode wird durch einen bestimmten Algorithmus erhalten. In diesem Beispiel verwenden wir einen einfachen Algorithmus: Addieren Sie die ersten drei Stadtnummern und die fünf Die Nummer wird mit MD5 verschlüsselt, und dann werden die ersten beiden Ziffern des MD5-Werts als Prüfcode verwendet, sodass der zweistellige Prüfcode nach der Nummer erhalten wird.

$card_pre = '755'; 

$card_vc = substr(md5($card_pre.$card_no),0,2); 

$card_vc = strtoupper($card_vc); 

echo $card_pre.$card_no.$card_vc;

In der tatsächlichen Anwendung kann die Dezimalzahl über die Datenbank abgerufen werden, um sicherzustellen, dass die Nummer eindeutig ist. Anschließend werden die oben genannten Codes kombiniert, um schließlich eine 10-stellige, nicht doppelte Mitgliedskartennummer zu generieren.

Empfohlenes Lernen: „PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSo erreichen Sie eine nicht doppelte Kodierung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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