Đây là đoạn code PHP được thiết kế để kiểm tra tính hợp lệ và độ tin cậy của số điện thoại trong quy trình thanh toán của một trang web thương mại điện tử (có thể là WooCommerce do sử dụng hàm wc_add_notice).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

// Hàm kiểm tra xem số điện thoại thuộc danh sách cụ thể hay không
function is_phone_in_blocked_list($phone_number) {
$blocked_phone_numbers = array(
'0971234567',
'0981234567',
// Thêm các số điện thoại khác vào danh sách nếu cần
);

// Kiểm tra xem số điện thoại có trong danh sách không
if (in_array($phone_number, $blocked_phone_numbers)) {
return true;
}

return false;
}

// Hàm kiểm tra xem số điện thoại có đúng định dạng số điện thoại Việt Nam hay không
function is_valid_vietnam_phone_number($phone_number) {
// Sử dụng biểu thức chính quy để kiểm tra định dạng số điện thoại Việt Nam
$pattern = '/^(05|03|07|08|09)[0-9]{8}$/';

if (preg_match($pattern, $phone_number)) {
return true; // Số điện thoại hợp lệ
} else {
return false; // Số điện thoại không hợp lệ
}
}

// Hàm kiểm tra trước khi đặt hàng
function check_billing_phone_before_checkout() {
// Lấy số điện thoại từ biểu mẫu đặt hàng và loại bỏ ký tự đặc biệt
$billing_phone = sanitize_phone_number($_POST['billing_phone']);

// Kiểm tra xem số điện thoại có trong danh sách cấm không
if (is_phone_in_blocked_list($billing_phone)) {
wc_add_notice('Số điện thoại này không được phép đặt hàng.', 'error');
} elseif (!is_valid_vietnam_phone_number($billing_phone)) {
wc_add_notice('Số điện thoại không hợp lệ. Vui lòng kiểm tra lại.', 'error');
}
}

// Hàm loại bỏ ký tự đặc biệt khỏi số điện thoại
function sanitize_phone_number($phone_number) {
$sanitized_phone = preg_replace('/\D/', '', $phone_number);
return $sanitized_phone;
}

Giải thích code

Dưới đây là giải thích chi tiết từng phần:

1. Hàm is_phone_in_blocked_list($phone_number):

  • Mục đích: Kiểm tra xem một số điện thoại có nằm trong danh sách các số điện thoại bị chặn (ví dụ: những số điện thoại có hành vi lừa đảo, spam, v.v.).
  • Cách hoạt động:
    • Nhận một số điện thoại làm tham số đầu vào.
    • Duy trì một mảng $blocked_phone_numbers chứa các số điện thoại bị chặn.
    • Sử dụng hàm in_array để kiểm tra xem số điện thoại có tồn tại trong mảng này không.
    • Trả về true nếu số điện thoại nằm trong danh sách, ngược lại trả về false.

2. Hàm is_valid_vietnam_phone_number($phone_number):

  • Mục đích: Xác minh xem một số điện thoại có tuân thủ định dạng số điện thoại hợp lệ tại Việt Nam hay không.
  • Cách hoạt động:
    • Nhận một số điện thoại làm tham số đầu vào.
    • Sử dụng biểu thức chính quy (regular expression) '/^(05|03|07|08|09)[0-9]{8}$/' để kiểm tra định dạng. Biểu thức này khớp với các số điện thoại bắt đầu bằng 05, 03, 07, 08 hoặc 09, tiếp theo là 8 chữ số.
    • Trả về true nếu số điện thoại hợp lệ, ngược lại trả về false.

3. Hàm check_billing_phone_before_checkout():

  • Mục đích: Thực hiện kiểm tra số điện thoại thanh toán trước khi khách hàng hoàn tất đơn hàng.
  • Cách hoạt động:
    • Lấy số điện thoại từ trường nhập liệu billing_phone trong biểu mẫu đặt hàng.
    • Gọi hàm sanitize_phone_number để làm sạch số điện thoại, loại bỏ các ký tự không phải số.
    • Gọi hàm is_phone_in_blocked_list để kiểm tra xem số điện thoại có bị chặn không. Nếu có, hiển thị thông báo lỗi cho khách hàng.
    • Gọi hàm is_valid_vietnam_phone_number để kiểm tra định dạng số điện thoại. Nếu không hợp lệ, hiển thị thông báo lỗi khác.

4. Hàm sanitize_phone_number($phone_number):

  • Mục đích: Loại bỏ các ký tự không phải số khỏi số điện thoại.
  • Cách hoạt động:
    • Nhận một số điện thoại làm tham số đầu vào.
    • Sử dụng preg_replace với biểu thức chính quy '/\D/' để thay thế tất cả các ký tự không phải số bằng một chuỗi rỗng.
    • Trả về số điện thoại đã được làm sạch.

Tổng quan:

Đoạn mã này cung cấp một cơ chế để đảm bảo rằng số điện thoại được cung cấp bởi khách hàng trong quá trình thanh toán là hợp lệ (theo định dạng Việt Nam) và không nằm trong danh sách các số điện thoại bị chặn. Điều này giúp ngăn chặn các hành vi lừa đảo và đảm bảo rằng thông tin liên lạc với khách hàng là chính xác.