Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tạo ID duy nhất ngắn trong PHP bằng auto_increment?

Bạn sẽ cần một cái gì đó chính xác bằng cách xây dựng, tức là một hàm hoán vị:đây là một hàm thực hiện ánh xạ một-một, có thể đảo ngược của một số nguyên (bộ đếm tuần tự của bạn) với một số nguyên khác. làm việc):

  • đảo ngược một số bit (chẳng hạn như sử dụng XOR, ^ trong PHP)
  • hoán đổi vị trí của các bit (($ i &0xc)>> 2 | ($ i &0x3) <<2) hoặc chỉ đảo ngược thứ tự của tất cả các bit
  • thêm một mô-đun giá trị không đổi vào phạm vi tối đa của bạn (phải là hệ số hai, nếu bạn đang kết hợp giá trị này với các giá trị ở trên)

Ví dụ:hàm này sẽ chuyển đổi 0, 1, 2, 3, 5, .. thành 13, 4, 12, 7, 15, .. cho các số lên đến 15:

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

CHỈNH SỬA

Một cách dễ dàng hơn là sử dụng trình tạo đồng dư tuyến tính (LCG, thường được sử dụng để tạo số ngẫu nhiên), được xác định bằng công thức có dạng:

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

Đối với giá trị tốt của a, c và m, dãy X_0, X_1 .. X_m-1 sẽ chứa tất cả các số từ 0 đến m-1 đúng một lần. Bây giờ bạn có thể bắt đầu từ một chỉ số tăng tuyến tính và sử dụng tiếp theo giá trị trong chuỗi LCG làm khóa "bí mật" của bạn.

EDIT2

Triển khai:Bạn có thể thiết kế thông số LCG của riêng bạn , nhưng nếu bạn hiểu sai, nó sẽ không bao gồm toàn bộ phạm vi (và do đó có các bản sao), vì vậy tôi sẽ sử dụng một bộ tham số đã xuất bản và đã thử ở đây từ giấy này :

a = 16807, c = 0, m = 2147483647

Điều này cung cấp cho bạn phạm vi 2 ** 31. Với pack (), bạn có thể lấy số nguyên kết quả dưới dạng một chuỗi, base64_encode () biến nó thành một chuỗi có thể đọc được (tối đa 6 ký tự quan trọng, 6 bit mỗi byte) vì vậy đây có thể là hàm của bạn:

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. Làm thế nào tốt nhất để so sánh với 0 trong PHP?

  2. Laravel Eloquent chọn tất cả các hàng có max create_at

  3. Sử dụng Cơ sở dữ liệu quan hệ MySQL trên Ubuntu 10.10 (Maverick)

  4. Nối nhiều hàng trong các hàng đơn trong MySQL

  5. sự khác biệt giữa GROUP BY và ORDER BY trong sql