Search…

Giải Thuật Sinh Chuỗi Ngẫu Nhiên

15/09/20202 min read
Giải thuật sinh chuỗi ngẫu nhiên trong C/C++ phục vụ việc sinh Password hoặc mã dự thưởng.

Giải thuật

Xác định tập hợp các kí tự và số muốn xuất hiện trong chuỗi ngẫu nhiên. Trong bài viết này sẽ chọn tập hợp (R) gồm các kí tự a-z, A-Z và 0-9.

Chọn 1 ký tự ngẫu nhiên trong R: việc lấy ngẫu nhiên một kí tự thuộc R thực chất là chọn ngẫu nhiên một vị trí (index) trong tập R. Giả sử tập R có n phần tử, mỗi phần tử được đánh số từ 0 → (n - 1), suy ra miền giá trị của index là [0 ... (n – 1)].

Tùy vào độ dài chuỗi ngẫu nhiên cần sinh theo yêu cầu (n ký tự) mà lặp lại n lần chọn ký tự ngẫu nhiên như trên.

Hiện thực

Hàm sinh chuỗi ngẫu nhiên

void RandomStringGenerator(char* code, int codeLength)
{
    char* box = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefjhijklmnopqrstuvwxyz0123456789";
    int boxLength = strlen(box);
    
    for (int i = 0; i < codeLength; i++)
    {
        code[i] = box[rand() % boxLength];
    }
    code[codeLength] = '\0';
}

Trong đó:

  • code là mảng để lưu chuỗi ngẫu nhiên được sinh ra.
  • codeLength là tham số chỉ định độ dài chuỗi ngẫu nhiên mong muốn.
  • box mang ý nghĩa là những ký tự sẽ xuất hiện trong chuỗi ngẫu nhiên. Ví dụ box có 5 ký tự abcde thì kết quả của code được sinh ra chỉ nằm trong phạm vi các ký tự này. Nếu bạn muốn chuỗi trả về có thêm các ký tự đặc biệt như !@#$%^..., bạn có thể tự thêm vào chuỗi box.

Code chương trình sinh chuỗi đầy đủ và cách sử dụng

Cho cả 2 trường hợp cấp phát động và cấp phát tĩnh cho chuỗi ngẫu nhiên.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

void RandomStringGenerator(char* code, int codeLength)
{
	char* box = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefjhijklmnopqrstuvwxyz0123456789";
	int boxLength = strlen(box);
	
	for (int i = 0; i < codeLength; i++)
	{
		code[i] = box[rand() % boxLength];
	}
	code[codeLength] = '\0';
}

int main()
{
	srand(time(0));

	int length1 = 6;
	char code1[6 + 1];
	RandomStringGenerator(&code1[0], length1);
	printf("%s\n", code1);

	int length2 = 8;
	char* code2 = new char[length2 + 1];
	RandomStringGenerator(code2, length2);
	printf("%s\n", code2);
	delete[]code2;

	return 0;
}

Hoặc có thể download code đầy đủ giải thuật sinh chuỗi ngẫu nhiên tại đây.

Tham khảo

Random Số Trong C++

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024