Tạo chuỗi ngẫu nhiên trong php

Đến một thời điểm nào đó chắc hẳn bạn sẽ cần tạo một chuỗi ngẫu nhiên [random string] để xác nhận tài khoản hoặc 1 cái gì đó mà bạn cần tới, hôm nay mình sẽ giúp các bạn 1 đoạn code rất đơn giản để làm công việc này. Nào chúng ta cùng bắt đầu nào.. Đầu tiên Chúng ta sẽ đặt tên hàm này là ...

Đến một thời điểm nào đó chắc hẳn bạn sẽ cần tạo một chuỗi ngẫu nhiên [random string] để xác nhận tài khoản hoặc 1 cái gì đó mà bạn cần tới, hôm nay mình sẽ giúp các bạn 1 đoạn code rất đơn giản để làm công việc này. Nào chúng ta cùng bắt đầu nào..

Đầu tiên Chúng ta sẽ đặt tên hàm này là rand_string, hàm này sẽ yêu cầu 1 tham số $length [ chiều dài của chuỗi ]

function rand_string[ $length ] {
}

Kế tiếp chúng ta sẽ tạo ra 1 chuỗi bao gồm tất cả các kí tự mà bạn muốn dùng làm hàm ngẫu nhiên

$chars = “abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789”;

Sau đó chúng ta sẽ tạo ra 1 vòng lặp, vòng lặp này được dùng để tạo ra các kí tự ngẫu nhiên trong chuỗi chúng ta vừa tạo trước đây, bạn xem đoạn code sau sẽ hiểu rõ hơn ý mình muốn nói

1
2
3
4
5
6

Việc cuối cùng là chúng ta dùng hàm substr dùng để cắt ra số lượng kí tự mà chúng ta muốn lấy ra

$str = substr[ str_shuffle[ $chars ], 0, $length ];

vậy là đã hoàn tất , bây giờ chúng ta chỉ cần ráp tất cả các đoạn code trên là xong.

1
2
3
4
5
6
7
8
9
10

Cách sử dung:

Rất đơn giản khi nào bạn cần sử dụng thì bạn chỉ cần gọi hàm ra như sau:

$my_string = rand_string[ 5 ];

Chúc các bạn thành công !

Tags: hoc php php code php string ramdom string tao chuoi ngau nhien thu thuat php

Chuyên Mục: PHP

Bài viết được đăng bởi webmaster

answer

1255

Để trả lời câu hỏi này cụ thể, hai vấn đề:

  1. $randstring không nằm trong phạm vi khi bạn lặp lại nó.
  2. Các nhân vật không được nối với nhau trong vòng lặp.

Đây là một đoạn mã với các sửa chữa:

function generateRandomString[$length = 10] {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen[$characters];
    $randomString = '';
    for [$i = 0; $i 

81 hữu ích 5 bình luận chia sẻ

answer

43

Tùy thuộc vào ứng dụng của bạn [tôi muốn tạo mật khẩu], bạn có thể sử dụng

$string = base64_encode[openssl_random_pseudo_bytes[30]];

Là cơ sở64, chúng có thể chứa =hoặc -cũng như các ký tự được yêu cầu. Bạn có thể tạo một chuỗi dài hơn, sau đó lọc và cắt nó để loại bỏ những chuỗi đó.

openssl_random_pseudo_bytesdường như là cách được đề xuất để tạo một số ngẫu nhiên thích hợp trong php. Tại sao randtôi không sử dụng /dev/random.

43 hữu ích 5 bình luận chia sẻ

answer

25

Tôi biết điều này có thể hơi muộn với trò chơi, nhưng đây là một lớp đơn giản tạo ra một chuỗi ngẫu nhiên thực sự mà không có bất kỳ vòng lặp cấp độ kịch bản hoặc sử dụng các thư viện openssl.

echo substr[str_shuffle[str_repeat['0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', mt_rand[1,10]]],1,10];

Để phá vỡ nó để các tham số rõ ràng

// Character List to Pick from
$chrList = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

// Minimum/Maximum times to repeat character List to seed from
$chrRepeatMin = 1; // Minimum times to repeat the seed string
$chrRepeatMax = 10; // Maximum times to repeat the seed string

// Length of Random String returned
$chrRandomLength = 10;

// The ONE LINE random command with the above variables.
echo substr[str_shuffle[str_repeat[$chrList, mt_rand[$chrRepeatMin,$chrRepeatMax]]],1,$chrRandomLength];

Phương pháp này hoạt động bằng cách lặp lại ngẫu nhiên danh sách ký tự, sau đó xáo trộn chuỗi kết hợp và trả về số lượng ký tự được chỉ định.

Bạn có thể chọn ngẫu nhiên thêm điều này, bằng cách ngẫu nhiên độ dài của chuỗi được trả về, thay thế $chrRandomLengthbằng mt_rand[8, 15][đối với một chuỗi ngẫu nhiên từ 8 đến 15 ký tự].

25 hữu ích 5 bình luận chia sẻ

answer

24

function generateRandomString[$length = 15]
{
    return substr[sha1[rand[]], 0, $length];
}

Tada!

24 hữu ích 5 bình luận chia sẻ

answer

23

Một cách tốt hơn để thực hiện chức năng này là:

function RandomString[$length] {
    $keys = array_merge[range[0,9], range['a', 'z']];

    $key = "";
    for[$i=0; $i generateString[12, $alphabet];

14 hữu ích 2 bình luận chia sẻ

answer

9

Phương pháp ngắn ..

Dưới đây là một số phương pháp ngắn nhất để tạo chuỗi ngẫu nhiên

9 hữu ích 0 bình luận chia sẻ

answer

9

Tôi đã kiểm tra hiệu năng của hầu hết các chức năng phổ biến ở đó, thời gian cần thiết để tạo ra 1000'000 chuỗi gồm 32 ký hiệu trên hộp của tôi là:

2.5 $s = substr[str_shuffle[str_repeat[$x='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil[$length/strlen[$x]] ]],1,32];
1.9 $s = base64_encode[openssl_random_pseudo_bytes[24]];
1.68 $s = bin2hex[openssl_random_pseudo_bytes[16]];
0.63 $s = base64_encode[random_bytes[24]];
0.62 $s = bin2hex[random_bytes[16]];
0.37 $s = substr[md5[rand[]], 0, 32];
0.37 $s = substr[md5[mt_rand[]], 0, 32];

Xin lưu ý không quan trọng là nó thực sự dài bao nhiêu nhưng chậm hơn và cái nào nhanh hơn để bạn có thể chọn theo yêu cầu của mình, bao gồm cả mật mã, sẵn sàng, v.v.

chất nền [] xung quanh MD5 đã được thêm vào vì độ chính xác nếu bạn cần chuỗi ngắn hơn 32 ký hiệu.

Vì lợi ích của câu trả lời: chuỗi không được nối nhưng được ghi đè và kết quả của hàm không được lưu trữ.

9 hữu ích 0 bình luận chia sẻ

answer

7

function rndStr[$len = 64] {
     $randomData = file_get_contents['/dev/urandom', false, null, 0, $len] . uniqid[mt_rand[], true];
     $str = substr[str_replace[array['/','=','+'],'', base64_encode[$randomData]],0,$len];
    return $str;
}

7 hữu ích 1 bình luận chia sẻ

answer

7

Cái này được lấy từ các nguồn adminer :

/** Get a random string
* @return string 32 hexadecimal characters
*/
function rand_string[] {
    return md5[uniqid[mt_rand[], true]];
}

Adminer , công cụ quản lý cơ sở dữ liệu viết bằng PHP.

7 hữu ích 0 bình luận chia sẻ

answer

6

Một cách rất nhanh là làm một cái gì đó như:

substr[md5[rand[]],0,10];

Điều này sẽ tạo ra một chuỗi ngẫu nhiên với độ dài 10 ký tự. Tất nhiên, một số người có thể nói rằng nó nặng hơn một chút về mặt tính toán, nhưng ngày nay các bộ xử lý được tối ưu hóa để chạy thuật toán md5 hoặc sha256 rất nhanh. Và tất nhiên, nếu rand[]hàm trả về cùng một giá trị, kết quả sẽ giống nhau, có cơ hội là 1/3276767 giống nhau. Nếu vấn đề bảo mật, thì chỉ cần thay đổi rand[]thànhmt_rand[]

6 hữu ích 1 bình luận chia sẻ

answer

6

Chức năng trợ giúp từ khung công tác Laravel 5

/**
 * Generate a "random" alpha-numeric string.
 *
 * Should not be considered sufficient for cryptography, etc.
 *
 * @param  int  $length
 * @return string
 */
function str_random[$length = 16]
{
    $pool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

    return substr[str_shuffle[str_repeat[$pool, $length]], 0, $length];
}

6 hữu ích 1 bình luận chia sẻ

answer

5

/**
 * @param int $length
 * @param string $abc
 * @return string
 */
function generateRandomString[$length = 10, $abc = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"]
{
    return substr[str_shuffle[$abc], 0, $length];
}

Nguồn từ //www.xeweb.net/2011/02/11/generate-a-random-opes-az-0-9-in-php/

5 hữu ích 0 bình luận chia sẻ

answer

4

Phiên bản chỉnh sửa của hàm hoạt động tốt, chỉ một vấn đề tôi tìm thấy: Bạn đã sử dụng sai ký tự để đóng $ ký tự, do đó, ký tự 'đôi khi là một phần của chuỗi ngẫu nhiên được tạo.

Để khắc phục điều này, hãy thay đổi:

$characters = 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’;

đến:

$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

Theo cách này, chỉ các ký tự kèm theo được sử dụng và ký tự 'sẽ không bao giờ là một phần của chuỗi ngẫu nhiên được tạo.

4 hữu ích 0 bình luận chia sẻ

answer

4

Một lớp lót khác, tạo ra một chuỗi ngẫu nhiên gồm 10 ký tự có chữ và số. Nó sẽ tạo một mảng với range[điều chỉnh tham số thứ hai để đặt kích thước], lặp trên mảng này và gán một ascii-char ngẫu nhiên [phạm vi 0-9 hoặc az], sau đó mã hóa mảng để lấy chuỗi.

$str = implode['', array_map[function [] { return chr[rand[0, 1] ? rand[48, 57] : rand[97, 122]]; }, range[0, 9]]];

Lưu ý: chỉ hoạt động trong PHP 5.3+

4 hữu ích 3 bình luận chia sẻ

answer

4

một đường thẳng.
nhanh chóng cho các chuỗi lớn với một số tính độc đáo.

function random_string[$length]{
    return substr[str_repeat[md5[rand[]], ceil[$length/32]], 0, $length];
}

4 hữu ích 2 bình luận chia sẻ

answer

3

Tôi thích bình luận cuối cùng sử dụng openssl_random_pseudo_bytes, nhưng đó không phải là giải pháp cho tôi vì tôi vẫn phải xóa các ký tự tôi không muốn và tôi không thể có được chuỗi độ dài đã đặt. Đây là giải pháp của tôi ...

function rndStr[$len = 20] {
    $rnd='';
    for[$i=0;$i

bạn cũng có thể quan tâm:

hoặc một số khác:

3 hữu ích 2 bình luận chia sẻ

answer

2

Một cách khác để tạo một chuỗi ngẫu nhiên trong PHP là:

function RandomString[$length] {
    $original_string = array_merge[range[0,9], range['a','z'], range['A', 'Z']];
    $original_string = implode["", $original_string];
    return substr[str_shuffle[$original_string], 0, $length];
}
echo RandomString[6];

2 hữu ích 0 bình luận chia sẻ

answer

2

Có một mã đơn giản:

echo implode["",array_map[create_function['$s','return substr[$s,mt_rand[0,strlen[$s]],1];'],array_fill[0,16,"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"]]];

Có hướng dẫn đơn giản:

  • Để thay đổi độ dài của chuỗi , chỉ thay đổi 16giá trị khác.
  • Để chọn từ các ký tự khác nhau, vui lòng thay đổi chuỗi ký tự.

2 hữu ích 0 bình luận chia sẻ

answer

2

Tham số một lớp chỉ sử dụng các hàm riêng của PHP , hoạt động kể từ PHP 5.1.0

str_shuffle[implode['', [array_intersect_key[[$map =  array_map['chr', array_merge[array_map['mt_rand', array_fill[0, $length = 25, 48], array_fill[0,$length,57]],array_map['mt_rand', array_fill[0, $length, 65], array_fill[0,$length,90]],array_map['mt_rand', array_fill[0, $length, 97], array_fill[0,$length,122]]]]], array_flip[$keys = array_rand[$map, $length]]]]]]

2 hữu ích 0 bình luận chia sẻ

answer

1

Chủ Đề