Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Hasilkan karakter alfanumerik acak unik yang panjangnya 7 karakter

Umumnya tidak mungkin untuk menghasilkan urutan dengan elemen unik dan acak:jelas untuk menjadi unik, algoritme harus memperhitungkan elemen yang dihasilkan sebelumnya dalam urutan, sehingga yang berikutnya tidak akan benar-benar acak.

Oleh karena itu, taruhan terbaik Anda adalah mendeteksi tabrakan dan coba lagi (yang bisa sangat mahal dalam kasus khusus Anda).

Jika Anda dibatasi hanya 7 karakter, tidak banyak yang dapat Anda lakukan di atas:

$allowed_chars = 'abcdefghijklmnopqrstuvwxz';
$allowed_count = strlen($allowed_chars);
$password = null;
$password_length = 7;

while($password === null || already_exists($password)) {
    $password = '';
    for($i = 0; $i < $password_length; ++$i) {
        $password .= $allowed_chars{mt_rand(0, $allowed_count - 1)};
    }
}

Ini pada akhirnya akan memberi Anda kata sandi baru.

Namun, dalam kasus serupa yang saya temui, saya biasanya memilih ukuran kata sandi yang lebih besar yang juga merupakan ukuran representasi hex dari fungsi hash yang populer (mis. md5 ). Kemudian Anda dapat membuatnya lebih mudah untuk diri sendiri dan mengurangi kemungkinan kesalahan:

$password = time(); // even better if you have some other "random" input to use here

do {
    $password = md5(time().$password);
}
while (already_exists($password));

Ini juga memiliki keuntungan tambahan bahwa ruang urutan lebih besar, sehingga akan ada lebih sedikit tabrakan. Anda dapat memilih ukuran fungsi hash sesuai dengan jumlah kata sandi yang diharapkan yang akan Anda buat di masa mendatang untuk "menjamin" kemungkinan tabrakan yang rendah dan dengan demikian lebih sedikit panggilan ke already_exists yang mungkin mahal fungsi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menjalankan beberapa kueri SQL di MySQL Workbench?

  2. Bagaimana mengonversi tipe kolom varchar ke tipe tanggal tanpa kehilangan tanggal

  3. Cara memesan berdasarkan data tabel pivot di Eloquent ORM Laravel

  4. Mengapa kita harus menutup database MySQL setelah perintah query?

  5. Bisakah sebuah tabel memiliki beberapa kunci utama?