Hướng dẫn how to generate unique code in php? - làm thế nào để tạo mã duy nhất trong php?

❮ Php TÀI LIỆU THAM KHẢO

Định nghĩa và cách sử dụng

Hàm uniqid [] tạo ra một id duy nhất dựa trên microtime [thời gian hiện tại tính bằng micro giây].

Lưu ý: ID được tạo từ hàm này không đảm bảo tính duy nhất của giá trị trả về! Để tạo ra một cực kỳ khó dự đoán ID, hãy sử dụng hàm md5 []. The generated ID from this function does not guarantee uniqueness of the return value! To generate an extremely difficult to predict ID, use the md5[] function.

Cú pháp

uniqid [tiền tố, more_entropy]

Giá trị tham số

Tham sốSự mô tả
tiếp đầu ngữKhông bắt buộc. Chỉ định một tiền tố cho ID duy nhất [hữu ích nếu hai tập lệnh tạo ID chính xác cùng một micro giây]
More_entropyKhông bắt buộc. Chỉ định thêm entropy ở cuối giá trị trả về. Điều này sẽ làm cho kết quả độc đáo hơn. Khi được đặt thành true, chuỗi trả về sẽ là 23 ký tự. Mặc định là sai và chuỗi trả về sẽ dài 13 ký tự

Chi tiết kỹ thuật

Giá trị trở lại:Phiên bản PHP:Changelog:
Trả về định danh duy nhất, dưới dạng chuỗi
4+
Tham số tiền tố đã trở thành tùy chọn trong PHP 5.0. Giới hạn dài 114 ký tự cho tiền tố đã được nâng lên trong PHP 4.3.1.
The limit of 114 characters long for prefix was raised in PHP 4.3.1.

❮ Php TÀI LIỆU THAM KHẢO


Thư viện tiêu chuẩn PHP 7 cung cấp chức năng

md5[uniqid[$your_user_login, true]]
4 tạo ra các byte giả ngẫu nhiên bảo mật bằng mã hóa.

Example:

$bytes = random_bytes[20];
var_dump[bin2hex[$bytes]];

Ví dụ trên sẽ xuất ra một cái gì đó tương tự như:

string[40] "5fe69c95ed70a9869d9f9af7d8400a6673bb9ce9"

Thông tin thêm: //php.net/manual/en/function.random-bytes.php

Php 5 [lỗi thời]

Tôi chỉ đang xem xét cách giải quyết vấn đề tương tự này, nhưng tôi cũng muốn chức năng của mình tạo ra một mã thông báo có thể được sử dụng để truy xuất mật khẩu. Điều này có nghĩa là tôi cần giới hạn khả năng của mã thông báo được đoán. Bởi vì

md5[uniqid[$your_user_login, true]]
5 dựa trên thời gian và theo php.net "giá trị trả về ít khác với microtime []",
md5[uniqid[$your_user_login, true]]
5 không đáp ứng các tiêu chí. PHP khuyến nghị sử dụng
md5[uniqid[$your_user_login, true]]
7 thay vào đó để tạo mã thông báo bảo mật bằng mã hóa.

Một câu trả lời nhanh chóng, ngắn và đến điểm là:

bin2hex[openssl_random_pseudo_bytes[$bytes]]

sẽ tạo ra một chuỗi ngẫu nhiên các ký tự chữ và số có độ dài = $ byte * 2. Thật không may, điều này chỉ có bảng chữ cái là

md5[uniqid[$your_user_login, true]]
8, nhưng nó hoạt động.

Dưới đây là chức năng mạnh nhất mà tôi có thể làm cho điều đó đáp ứng các tiêu chí [đây là phiên bản được triển khai của câu trả lời của Erik].

function crypto_rand_secure[$min, $max]
{
    $range = $max - $min;
    if [$range < 1] return $min; // not so random...
    $log = ceil[log[$range, 2]];
    $bytes = [int] [$log / 8] + 1; // length in bytes
    $bits = [int] $log + 1; // length in bits
    $filter = [int] [1  $range];
    return $min + $rnd;
}

function getToken[$length]
{
    $token = "";
    $codeAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $codeAlphabet.= "abcdefghijklmnopqrstuvwxyz";
    $codeAlphabet.= "0123456789";
    $max = strlen[$codeAlphabet]; // edited

    for [$i=0; $i < $length; $i++] {
        $token .= $codeAlphabet[crypto_rand_secure[0, $max-1]];
    }

    return $token;
}

md5[uniqid[$your_user_login, true]]
9 hoạt động như một sự sụt giảm trong thay thế cho

Bài Viết Liên Quan

Chủ Đề