Vermeiden Sie Duplikate von Dateinamen
32 Zeichen hexadezimale Systemnummer .
Format: Die GUID hat das Format „xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx“, wobei jedes x eine 32-stellige Hexadezimalzahl im Bereich von 0-9 oder a-f ist. Beispiel: 6F9619FF-8B86-D011-B42D-00C04FC964FF ist ein gültiger GUID-Wert.
Vorteile: Fast keine Wiederholungen;
Nachteile: Das Umbenennen hochgeladener Bilder dauert immer noch zu lange.
Verwendung:
<?php/* com_create_guid()是php5版本支持的功能,对于不支持的版本,可以自己进行定义; */function guid(){ if (function_exists(‘com_create_guid’)){ return com_create_guid(); }else{ mt_srand((double)microtime()*10000);// optional for php 4.2.0 and up. echo(mt_rand()); $charid = strtoupper(md5(uniqid(rand(), true))); $hyphen = chr(45);// “-” $uuid = chr(123)// “{” .substr($charid, 0, 8).$hyphen .substr($charid, 8, 4).$hyphen .substr($charid,12, 4).$hyphen .substr($charid,16, 4).$hyphen .substr($charid,20,12) .chr(125);// “}” return $uuid; } }?>
gibt dieselbe 32-stellige Hexadezimalzahl wie Guid aus. Der Unterschied besteht darin, dass Guid zufällig generiert wird und MD5 dies tun muss entsprechend der Eingabedatengenerierung eingegeben werden.
< ?php$str = "Hello";echo md5($str);?>
Ausgabe:
8b1a9953c4611296a827abf8c47804d7
Vorteile: Der Ausgabewert kann basierend auf den eingegebenen Seed-Daten gesteuert werden. Wenn die Seed-Daten regelmäßig sind und sich nicht wiederholen, können die Daten sein durch den MD5-Schutz verarbeitet, was große Verwirrung stiftet.
Nachteile: 32-Bit-Zeichen sind zu lang; es müssen nicht duplizierte Seed-Daten bereitgestellt werden; bei Sekunden als Seed-Daten kommt es dennoch zu Duplikaten.
Verwendung:
< ?php/* *结合time()函数使用,以1970年到当前时间的秒数作为种子数。 */$str=time();echo md5($str);?>
Gibt eine 13- oder 23-Bit-Zeichenfolge zurück.
Für unsere Zwecke ist uniqid() wie eine verbesserte Version von md5(), insbesondere da wir differenzielle Bezeichner als Zeichenfolgenpräfixe verwenden können, um die Wahrscheinlichkeit einer wiederholten Benennung zu verringern.
Für extreme Situationen wie nicht hohe Parallelität wird die Verwendung dieser Funktion empfohlen, die bereits allgemeine Anforderungen erfüllen kann.
Definition: Die Funktion uniqid() generiert eine eindeutige ID basierend auf der aktuellen Zeit in Mikrosekunden.
Verwendung: uniqid(prefix,more_entropy)
Erläuterung: Präfix kann der Ausgabezeichenfolge ein Präfix hinzufügen. Das Beispiel lautet wie folgt: Wenn der Parameter „more_entropy“ wahr ist, wird eine 23-Bit-Zeichenfolge ausgegeben.
< ?phpvar_dump(uniqid());var_dump(uniqid("a")); ?>
Das Ausgabeergebnis ist:
string(13) “51734aa562254″ string(14) “a51734aa562257″
Vorteile: 13-stellige Zeichenfolgenlänge ist eine akzeptable Dateinamenslänge; Präfixe können hinzugefügt werden, und das Ergebnis enthält Datenverwirrung, die kann Rückschläge vermeiden. Rohdaten übertragen.
Nachteile: Ähnlich wie bei MD5, hohe Parallelität, Verwendung von Sekunden als Startdaten, es kommt immer noch zu Duplikaten.
Es ist ein bisschen wie eine unvollständige angepasste Version von uniqid(). Die „Seed-Nummer“ beginnt ", das in dieser Funktion erscheint. Der Begriff „Zeit“ ist sehr aufschlussreich.
Die in time() und uniqid() verwendete Standardzeit wird ab 1970 berechnet und die Länge beträgt zehn Ziffern (1366512439). Die Verwendung der „Startzeit der Startnummer“ kann diesen Wert reduzieren, da wir ihn tatsächlich benötigen ist nur ein Wert, der automatisch wachsen kann.
Nachdem die Startzeit individuell angepasst wurde, kann dies neben der Reduzierung der Länge auch zu Verwirrung führen.
/* * 参数 suffix_len指定 生成的 ID 值附加多少位随机数,默认值为 3。 * 感谢“Ivan Tan|谭俊青 DrinChing (at) Gmail.com”提供的算法。 * @param int suffix_len * @return string*/function fast_uuid($suffix_len=3){ //! 计算种子数的开始时间 $being_timestamp = strtotime(’2013-3-21′); $time = explode(‘ ‘, microtime()); $id = ($time[1] – $being_timestamp) . sprintf(‘%06u’, substr($time[0], 2, 6)); if ($suffix_len > 0) { $id .= substr(sprintf(‘%010u’, mt_rand()), 0, $suffix_len); } return $id; }
Ausgabe:
29832412631099013
Die Verwendung von Zufallszahlen ist bereits im obigen Beispiel zur Lösung aufgetaucht das Problem einer Sekunde Es sind mehrere Anfragen aufgetreten. Zwei Funktionen werden wie folgt bereitgestellt:
< ?phpfunction random($length) { $hash = ''; $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz'; $max = strlen($chars) - 1; PHP_VERSION < '4.2.0' && mt_srand((double)microtime() * 1000000); for($i = 0; $i < $length; $i++) { $hash .= $chars[mt_rand(0, $max)]; } return $hash; }function random2($length, $numeric = 0) { PHP_VERSION < '4.2.0' ? mt_srand((double)microtime() * 1000000) : mt_srand(); $seed = base_convert(md5(print_r($_SERVER, 1).microtime()), 16, $numeric ? 10 : 35); $seed = $numeric ? (str_replace('0', '', $seed).'012340567890') : ($seed.'zZ'.strtoupper($seed)); $hash = ''; $max = strlen($seed) - 1; for($i = 0; $i < $length; $i++) { $hash .= $seed[mt_rand(0, $max)]; } return $hash; }?>
Idee: Benutzer-ID+Sekunden+Zufallszahl. Darunter wird „Benutzer-ID+Sekunde“ von Dezimal in 64 umgewandelt, wodurch die Anzahl der Ziffern reduziert wird.
Benutzer-ID: Maximum Der in Dezimalzahl umgewandelte Wert in 64 „ZZZZ“ entspricht „16777215“ und der in Dezimalzahl umgewandelte Maximalwert von „ZZZ“ entspricht „262143“; Sekunden: Legen Sie Ihren eigenen Zeitstartpunkt fest .
Zufallszahl: Verwenden Sie random(3), um eine dreistellige Zufallszahl zu generieren;
$less=time()-strtotime(’2012-4-21′); 转换为64进制”1SpRe“,5位$less=time()-strtotime(’2013-3-21′); 转换为64进制”_jHY“;4位
5. Zusammenfassung
Zum Beispiel wird die von fast_uuid generierte 17-stellige Zahl in eine Hexadezimalzahl mit nur 7 Zeichen umgewandelt.
Die spezifische Verwendung kann flexibel entsprechend Ihrer eigenen Situation verwendet werden .
Einige Regeln für PHP-Variablenbezeichner
So generieren Sie eindeutige Bezeichner in PHP
Das obige ist der detaillierte Inhalt vonSo generieren Sie eindeutige Bezeichner in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!