Heim  >  Artikel  >  Backend-Entwicklung  >  PHP generiert eine eindeutige Mitgliedsnummer

PHP generiert eine eindeutige Mitgliedsnummer

王林
王林Original
2019-09-20 11:54:213068Durchsuche

PHP generiert eine eindeutige Mitgliedsnummer

Ohne Abfrage der Datenbank generiert jedes Mitglied, das sich anmeldet, eine Mitgliedskartennummer mit einer eindeutigen Kombination aus Zahlen und Buchstaben.

Die Darstellung ist wie folgt:

PHP generiert eine eindeutige Mitgliedsnummer

Wenn wir große Datenmengen nummerieren möchten und die Nummerierung eine Grenze hat Anzahl der Ziffern, z. B. ein 5-stelliges Kfz-Kennzeichen, eine 10-stellige Dokumentennummer, eine Bestellseriennummer, eine 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, wie zum Beispiel der Buchstabe Z, der 35 darstellt. 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 + ein zweistelliger Prüfcode. 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

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 = bcdiv($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 Passwort-Wörterbuch, also die Werte, die 0-Z entsprechen. Der Parameter $int in der Methode encodeID($int, $format). stellt die Zahl dar und $format stellt die Anzahl der Ziffern dar. Beispielsweise bedeutet encodeID(123456789,5) die Konvertierung der Zahl 123456789 in eine 5-stellige 36-stellige Zahl, und die Methode decodeID($ids) wird dazu verwendet Wandeln Sie die 36-stellige Zahl in eine Dezimalzahl um.

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, was tatsächlich bedeutet, dass die Kartennummer 888888 ist (6 Achter) Mitgliedsnummer, aber nach der tatsächlichen Konvertierung ist es 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: Fügen Sie die ersten drei hinzu Die Stadtnummer und die fünfstellige Kartennummer werden 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 = &#39;755&#39;; 
$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.

Der obige Inhalt dient nur als Referenz!

Empfohlenes Tutorial: PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonPHP generiert eine eindeutige Mitgliedsnummer. 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