Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menjana Rentetan 5 Aksara Rawak dengan Penduaan Minimum?

Bagaimana untuk Menjana Rentetan 5 Aksara Rawak dengan Penduaan Minimum?

DDD
DDDasal
2024-10-19 15:32:02766semak imbas

How to Generate Random 5-Character Strings with Minimal Duplication?

Menjana Rentetan 5 Aksara Rawak dengan Penduaan Minimum

Soalan: Bagaimana saya boleh menjana rentetan dengan tepat dengan tepat 5 aksara rawak dengan kebarangkalian pendua yang paling rendah?

Jawapan:

Kaedah 1:

<code class="php">$rand = substr(md5(microtime()), rand(0, 26), 5);</code>
  • Kaedah ini menggunakan cincang MD5 masa mikro semasa untuk menjana nombor rawak yang besar, kemudian mengekstrak 5 aksara daripada kedudukan rawak.

Kaedah 2:

<code class="php">$seed = str_split('abcdefghijklmnopqrstuvwxyz' . 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' . '0123456789!@#$%^&*()');
shuffle($seed);
$rand = '';
foreach (array_rand($seed, 5) as $k) $rand .= $seed[$k];</code>
  • Kaedah ini merombak tatasusunan semua aksara yang mungkin, kemudian memilih 5 aksara secara rawak. Ia kurang cekap untuk set aksara besar.

Kaedah 3:

<code class="php">function incrementalHash($len = 5) {
  $charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  $base = strlen($charset);
  $result = '';

  $now = explode(' ', microtime())[1];
  while ($now >= $base) {
    $i = (int)$now % $base;
    $result = $charset[$i] . $result;
    $now /= $base;
  }
  return substr(str_repeat($charset[0], $len) . $result, -$len);
}</code>
  • Kaedah ini menukar masa mikro semasa kepada nilai cincang tambahan. Walaupun ia kurang rawak, ia sesuai untuk kes di mana keunikan adalah penting, tetapi kebolehramalan adalah kurang penting.

Nota: Untuk aplikasi keselamatan tinggi, disyorkan untuk menggunakan yang lebih mantap penjana nombor rawak.

Atas ialah kandungan terperinci Bagaimana untuk Menjana Rentetan 5 Aksara Rawak dengan Penduaan Minimum?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn