Chào các bạn đã đến với chủ đề tiếp theo của mình. Hôm nay, mình sẽ tiếp tục hướng dẫn các bạn cách để tạo một chuỗi ngẫu nhiên trong lập trình Java. Có nhiều trường hợp chúng ta cần tạo chuỗi ngẫu nhiên, chẳng hạn tạo ra mã captcha để chống spam, gửi mã code xác nhận tài khoản, …. Ở bài này, mình sẽ đi qua những nội dung như sau:
Nội dung
1. Tự tạo chuỗi ngẫu nhiên
Để tạo một chuỗi ngẫu nhiên, chúng ta sẽ định nghĩa một chuỗi các ký tự được phép xuất hiện trong chuỗi ngẫu nhiên. Sau đó sẽ sử dụng Random để tạo một giá trị index ngẫu nhiên từ chuỗi đã định nghĩa trước đó. Cứ thực hiện random index và truy xuất ký tự từ index cho đến khi đầy đủ số lượng ký tự mong muốn.
Trong ví dụ này, chúng ta sẽ tạo 2 phương thức:
- randomAlphaNumeric(): Tạo một chuỗi ngẫu nhiên chỉ bao gồm các ký tự từ a-z, A-Z và 0-9, không bao gồm các ký tự đặc biệt.
- randomPassword(): Tạo một chuỗi password ngẫu nhiên bao gồm ít nhất 1 ký tự đặc biệt và 1 ký tự số.
package RandomString;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.function.Consumer;
public class Main {
private static final String alpha = "abcdefghijklmnopqrstuvwxyz"; // a-z
private static final String alphaUpperCase = alpha.toUpperCase(); // A-Z
private static final String digits = "0123456789"; // 0-9
private static final String specials = "~=+%^*/()[]{}/!@#$?|";
private static final String ALPHA_NUMERIC = alpha + alphaUpperCase + digits;
private static final String ALL = alpha + alphaUpperCase + digits + specials;
private static Random generator = new Random();
/**
* Random string with a-zA-Z0-9, not included special characters
*/
public String randomAlphaNumeric(int numberOfCharacter) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < numberOfCharacter; i++) {
int number = randomNumber(0, ALPHA_NUMERIC.length() - 1);
char ch = ALPHA_NUMERIC.charAt(number);
sb.append(ch);
}
return sb.toString();
}
/**
* Random string password with at least 1 digit and 1 special character
*/
public String randomPassword(int numberOfCharacter) {
List<String> result = new ArrayList<>();
Consumer<String> appendChar = s -> {
int number = randomNumber(0, s.length() - 1);
result.add("" + s.charAt(number));
};
appendChar.accept(digits);
appendChar.accept(specials);
while (result.size() < numberOfCharacter) {
appendChar.accept(ALL);
}
Collections.shuffle(result, generator);
return String.join("", result);
}
public static int randomNumber(int min, int max) {
return generator.nextInt((max - min) + 1) + min;
}
public static void main(String a[]){
int numberOfCharacter = 8;
Main rand = new Main();
System.out.println("randomString1: " + rand.randomAlphaNumeric(numberOfCharacter));
System.out.println("randomString1: " + rand.randomAlphaNumeric(numberOfCharacter));
System.out.println("randomString1: " + rand.randomAlphaNumeric(numberOfCharacter));
System.out.println("randomPassword1: " + rand.randomPassword(numberOfCharacter));
System.out.println("randomPassword2: " + rand.randomPassword(numberOfCharacter));
}
}
Khi chạy đoạn code trên nhiều lần, chúng ta sẽ thấy các kết quả khác nhau:
randomString1: 0Q8XjBoF
randomString1: Ui1rGRc6
randomString1: d761yHaY
randomPassword1: oplD4M$9
randomPassword2: ~m801QzG
2. Sử dụng lớp commons.lang3.text.RandomStringUtils
Để sử dụng các phương thức của commons lang3, chúng ta cần khai báo thư viện này vào project.
Có nhiều cách để khai báo thư viện vào project, cách đơn giản nhất là chúng ta sẽ tạo một project maven và khai báo thư viện commons lang3 vào file pom.xml của project như sau:
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
Một số phương thức hỗ trợ tạo chuỗi và số ngẫu nhiên trong lớp RandomStringUtils:
- random(int count) : Tạo một chuỗi ngẫu nhiên có chiều dài là số ký tự được chỉ định, không giới hạn loại ký tự được trả về.
- randomAscii(int count) : Tạo một chuỗi ngẫu nhiên có chiều dài là số ký tự được chỉ định, bao gồm các ký tự có giá trị ASCII từ 32 đến 126.
- randomNumeric(int count) : Tạo một chuỗi số ngẫu nhiên có chiều dài là số ký tự được chỉ định, bao gồm các ký tự số 0-9.
- randomAlphabetic(int count) : Tạo một chuỗi số ngẫu nhiên có chiều dài là số ký tự được chỉ định, bao gồm các ký tự chữ Latin (a-z, A-Z).
- randomAlphanumeric(int count) : Tạo một chuỗi số ngẫu nhiên có chiều dài là số ký tự được chỉ định, bao gồm các ký tự chữ Latin (a-z, A-Z) và số 0-9.
- random(int count, String input) : Tạo một chuỗi số ngẫu nhiên có chiều dài là số ký tự được chỉ định, chỉ bao gồm các ký tự được xác định trong input.
import org.apache.commons.lang3.RandomStringUtils;
public class Main {
public static void main(String a[]) {
System.out.println(RandomStringUtils.random(4));
System.out.println(RandomStringUtils.random(6));
System.out.println(RandomStringUtils.randomAscii(4));
System.out.println(RandomStringUtils.randomAscii(6));
System.out.println(RandomStringUtils.randomNumeric(4));
System.out.println(RandomStringUtils.randomNumeric(6));
System.out.println(RandomStringUtils.randomAlphabetic(4));
System.out.println(RandomStringUtils.randomAlphabetic(6));
System.out.println(RandomStringUtils.randomAlphanumeric(4));
System.out.println(RandomStringUtils.randomAlphanumeric(6));
String input = "abcd1234!@#$%^&*()-=_+;:<>,.?/";
System.out.println(RandomStringUtils.random(4, input));
System.out.println(RandomStringUtils.random(6, input));
}
}
3. Sử dụng java.util.UUID
UUID (Universally Unique Identifier) hay còn được biết đến như là GUID (Globally Unique Identifier), là một chuỗi đại diện cho một mã định danh duy nhất, không thể thay đổi (immutable), và có giá trị dài 128 bit.
UUID được sử dụng để tạo tên file ngẫu nhiên, id session trong ứng dụng web, id transaction, …
Phương thức java.util.UUID.randomUUID() được sử dụng để sinh ra một chuỗi ngẫu nhiên có độ dài 32 ký tự (128 bit) được biểu diễn ở hệ hệ thập lục phân (hex: 0-9A-F) và 4 ký tự phân tách (–).
Ví dụ:
import java.util.UUID;
public class Main {
public static void main(String a[]) {
UUID uuid = UUID.randomUUID();
System.out.println("UUID: " + uuid.toString());
}
}
Sau khi chạy đoạn code trên, kết quả được in như sau
UUID: 93a50a87-902e-4c93-98c6-1ac22c423940
4. Kết
Như vậy chúng ta đã tìm hiểu xong cách tạo một chuỗi ngẫu nhiên trong lập trình Java. Cảm ơn các bạn đã theo dõi bài viết của mình. Chúc các bạn thành công. Hẹn gặp lại các bạn ở những chủ đề tiếp theo.
Nguồn:
https://gpcoder.com/6171-tao-so-va-chuoi-ngau-nhien-trong-java/