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

Pembuatan ID unik pendek PHP menggunakan auto_increment?

Anda akan memerlukan sesuatu yang benar menurut konstruksinya, yaitu fungsi permutasi:ini adalah fungsi yang melakukan pemetaan satu-ke-satu yang dapat dibalik dari satu bilangan bulat (penghitung berurutan Anda) ke yang lain. Beberapa contoh (kombinasi apa pun dari ini juga harus kerja):

  • membalikkan beberapa bit (fi menggunakan XOR, ^ dalam PHP)
  • menukar tempat bit (($i &0xc)>> 2 | ($i &0x3) <<2), atau hanya membalik urutan semua bit
  • menambahkan nilai konstan modulo rentang maksimum Anda (harus menjadi faktor dua, jika Anda menggabungkan ini dengan yang di atas)

Contoh:fungsi ini akan mengubah 0, 1, 2, 3, 5, .. menjadi 13, 4, 12, 7, 15, .. untuk angka hingga 15:

$i=($input+97) & 0xf;
$result=((($i&0x1) << 3) + (($i&0xe) >> 1)) ^ 0x5;

EDIT

Cara yang lebih mudah adalah dengan menggunakan generator kongruensial linier (LCG, yang biasanya digunakan untuk menghasilkan bilangan acak), yang didefinisikan dengan rumus dalam bentuk:

X_n+1 = (a * X_n + c) mod m

Untuk nilai bagus dari a, c dan m, barisan dari X_0, X_1 .. X_m-1 akan memuat semua bilangan antara 0 dan m-1 tepat satu kali. Sekarang Anda dapat memulai dari indeks yang meningkat secara linier, dan menggunakan berikutnya nilai dalam urutan LCG sebagai kunci "rahasia" Anda.

EDIT2

Implementasi:Anda dapat mendesain parameter LCG Anda sendiri , tetapi jika Anda salah, itu tidak akan mencakup rentang penuh (dan karenanya memiliki duplikat) jadi saya akan menggunakan set parameter yang diterbitkan dan dicoba di sini dari makalah ini :

a = 16807, c = 0, m = 2147483647

Ini memberi Anda rentang 2**31. Dengan pack() Anda bisa mendapatkan integer yang dihasilkan sebagai string, base64_encode() menjadikannya string yang dapat dibaca (hingga 6 karakter signifikan, 6 bit per byte) jadi ini bisa menjadi fungsi Anda:

substr(base64_encode(pack("l", (16807 * $index) % 2147483647)), 0, 6)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara memilih nama kolom dengan spasi di MySQL

  2. Fungsi MySQL FLOOR() – Membulatkan ke Bawah ke Bilangan Bulat Terdekat

  3. Meminta contoh yang sah untuk memanggil prosedur tersimpan C#:MYSQL

  4. Bagaimana cara menghubungkan database mysql dan memasukkan data ke dalamnya menggunakan kode android

  5. Mengapa menggunakan SELECT FOR UPDATE?