Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menjana aksara tidak berulang 18-bit dalam php

Bagaimana untuk menjana aksara tidak berulang 18-bit dalam php

PHPz
PHPzasal
2023-03-29 10:10:14682semak imbas

Dalam pembangunan web, selalunya perlu menjana beberapa aksara rawak yang tidak berulang, seperti nombor pesanan, kod pengesahan, dsb. PHP ialah bahasa pembangunan yang digunakan secara meluas, dan kami boleh menggunakan PHP dengan mudah untuk melaksanakan fungsi ini. Artikel ini akan memperkenalkan cara menjana aksara tidak berulang 18-bit yang unik dalam PHP, serta algoritma dan teknik yang sepadan.

1. Gunakan nombor rawak untuk menjana aksara unik

Dalam php, kita boleh menggunakan fungsi rand() atau mt_rand() untuk menjana nombor rawak. Walau bagaimanapun, nombor rawak yang dijana oleh kaedah ini mungkin berulang, jadi beberapa kemahiran diperlukan untuk memastikan aksara yang dijana tidak berulang.

Berikut ialah kaedah mudah:

1 Tentukan rentetan kosong $chars untuk menyimpan aksara yang dijana

2. gunakan fungsi strpos() untuk mencari sama ada aksara itu sudah wujud dalam $chars, jana semula aksara rawak

3 rentetan.

Berikut ialah contoh kod:

function generateRandomString($length) {
  $chars = "";

  while (strlen($chars) < $length) {
    $char = chr(mt_rand(65, 90)); // 生成65-90的随机数字
    if (strpos($chars, $char) === false) { // 判断$char是否已经在$chars中出现过
      $chars .= $char;
    }
  }

  return $chars;
}

echo generateRandomString(18);

Dalam kod di atas, kami menggunakan fungsi mt_rand() untuk menjana nombor rawak antara 65 dan 90, dan kemudian gunakan chr( ) fungsi untuk menjana nombor ini Tukar kepada aksara yang sepadan. Oleh kerana rentetan rawak yang dijana mungkin diulang, gunakan fungsi strpos() untuk mencari sama ada aksara itu sudah wujud, dan ulangi proses menjana aksara rawak dan mencari melalui gelung sementara sehingga jumlah bilangan aksara yang dijana mencapai panjang yang ditetapkan, dan pulangan hasil.

2. Gunakan cap masa dan nombor rawak untuk menjana aksara unik

Kaedah di atas sudah boleh melengkapkan fungsi menjana aksara unik, tetapi disebabkan keperluan untuk mencari aksara yang dijana berulang kali, ia adalah perlu Kuasa pengkomputeran mungkin agak tinggi. Dalam situasi di mana akses serentak adalah tinggi dan bilangan aksara yang dijana adalah besar, masalah prestasi terdedah kepada berlaku.

Oleh itu, kita boleh menggunakan kaedah cap waktu + nombor rawak untuk menjana aksara unik.

Berikut ialah idea:

1 Hasilkan cap masa yang unik dan tukarkannya kepada rentetan perenambelasan; 2. Hasilkan rentetan rawak empat digit ke hadapan rentetan cap masa untuk menjadikannya 20 digit panjang

3 Gunakan fungsi substr() untuk memintas 16 digit terakhir rentetan cap masa sebagai aksara rawak yang dijana.

Berikut ialah contoh kod:

Dalam kod di atas, kami mula-mula menjana rentetan cap masa 16-bit, menukarnya menjadi rentetan 36 digit, dan kemudian menjana Rentetan rawak dengan panjang yang ditentukan. Akhir sekali, dua rentetan digabungkan, dan fungsi substr() digunakan untuk mendapatkan subrentetan berikutnya bagi panjang yang ditentukan, iaitu aksara tidak berulang yang dihasilkan.
function generateNonceStr($length = 18) {
  $timestamp = uniqid('', false);
  $nonce_str = substr($timestamp, 4) . substr(mt_rand(1000, 9999), 0, 4);
  return substr($nonce_str, -$length);
}

echo generateNonceStr();

3. Ringkasan

Artikel ini memperkenalkan dua kaedah menjana aksara unik, antaranya kaedah penggunaan cap masa dan penjanaan nombor rawak adalah lebih praktikal dan cekap. Untuk situasi seperti menjana nombor pesanan dalam senario berkaitan pembayaran, algoritma dan peraturan yang lebih lengkap harus digunakan untuk memastikan nombor pesanan yang dijana bukan sahaja bukan pendua, tetapi juga mengelakkan penampilan aksara atau nombor tertentu, mengurangkan risiko sedang diserang.

Atas ialah kandungan terperinci Bagaimana untuk menjana aksara tidak berulang 18-bit dalam php. 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