/ / Cách xác thực số thẻ tín dụng bằng biểu thức chính quy

Cách xác thực số thẻ tín dụng bằng biểu thức chính quy

Biểu thức chính quy là một chuỗi các ký tự tạo thành một mẫu tìm kiếm. Biểu thức chính quy chủ yếu được sử dụng để tìm kiếm, xác thực và chuyển đổi văn bản hoặc chuỗi.


Tìm hiểu cách xác thực các số thẻ tín dụng như Mastercard, Visa Card và American Express bằng cụm từ thông dụng.


Khi nào thì sử dụng RegEx để xác thực số thẻ tín dụng?

Các dịch vụ của bên thứ ba tính phí cho mỗi lần thực hiện giao dịch. Dù giao dịch có thành công hay không, bạn cũng cần phải trả phí. Trong những trường hợp như vậy, bạn muốn từ chối các số thẻ tín dụng rõ ràng là không hợp lệ. Bạn có thể nhanh chóng xác thực số thẻ tín dụng bằng cách sử dụng cụm từ thông dụng.

Nhưng bạn không thể hoàn toàn dựa vào xác thực biểu thức chính quy cho tính năng thanh toán của mình. Các công ty phát hành thẻ thường xuyên thay đổi mẫu số thẻ của họ (giới thiệu mẫu mới hoặc rút số cũ), vì vậy phương pháp regex không phải là giải pháp mạnh mẽ nhất. Mặc dù bạn có thể cố gắng cập nhật các mẫu thẻ từ một nguồn như Wikipedia được cập nhật thường xuyên.

Bạn cũng có thể sử dụng regex để nhanh chóng tìm thấy nhãn hiệu thẻ mà bạn có thể sử dụng để hiển thị logo hoặc nhãn.

Biểu thức chính quy có một số trường hợp sử dụng thực tế. Lệnh grep của Linux có lẽ là trường hợp sử dụng thực tế phổ biến nhất của regex.

Mã được sử dụng trong dự án này có sẵn trong kho lưu trữ GitHub và miễn phí cho bạn sử dụng theo giấy phép MIT.

RegEx để xác thực số thẻ Mastercard

Số thẻ Mastercard hợp lệ nếu nó đáp ứng các điều kiện sau:

  1. Chuỗi không được chứa bất kỳ ký tự đặc biệt, bảng chữ cái hoặc khoảng trắng nào.
  2. Số ký tự phải bằng 16.
  3. Chuỗi phải bắt đầu bằng dải số có 2 chữ số (từ 51 đến 55) hoặc dải số 4 chữ số (từ 2221 đến 2720).
    • Nếu chuỗi bắt đầu bằng dải số có 2 chữ số (từ 51 đến 55) thì 14 chữ số tiếp theo phải là một số từ 0 đến 9.
    • Nếu chuỗi bắt đầu bằng dải số có 4 chữ số (trong khoảng từ 2221 đến 2720) thì 12 chữ số tiếp theo phải là một số từ 0 đến 9.

Regex sau đây đáp ứng các điều kiện trên và có thể xác thực số thẻ Mastercard:

^5[1-5][0-9]{14}|^(222[1-9]|22[3-9]\d|2[3-6]\d{2}|27[0-1]\d|2720)[0-9]{12}$

Nếu bạn không hài lòng với biểu thức trên, trước tiên hãy xem hướng dẫn dành cho người mới bắt đầu về biểu thức chính quy.

Bạn có thể sử dụng regex ở trên để xác thực số thẻ Mastercard bằng bất kỳ ngôn ngữ lập trình nào. Đây là cách làm như vậy trong Python:

import re

def checkMasterCardNo(cardNo):
regex = "^5[1-5][0-9]{14}|^(222[1-9]|22[3-9]\d|2[3-6]\d{2}|27[0-1]\d|2720)[0-9]{12}$"
r = re.compile(regex)

if (re.search(r, cardNo)):
print("Valid")
else:
print("Not Valid")

card1 = "5110762060017101"
checkMasterCardNo(card1)

card2 = "8632458236982734"
checkMasterCardNo(card2)

Chạy mã này sẽ xác nhận rằng số đầu tiên là hợp lệ nhưng số thứ hai thì không:

RegEx để xác thực số thẻ Visa

Số Thẻ Visa hợp lệ nếu đáp ứng các điều kiện sau:

  1. Chuỗi không được chứa bất kỳ ký tự đặc biệt, bảng chữ cái hoặc khoảng trắng nào.
  2. Chuỗi phải bắt đầu bằng 4.
  3. Số lượng ký tự phải bằng 13 hoặc 16. Thẻ visa cũ có 13 ký tự và thẻ mới có 16 ký tự.
    • Nếu số ký tự bằng 13 thì 12 chữ số cuối phải là một số từ 0 đến 9.
    • Nếu số ký tự bằng 16 thì 15 chữ số cuối phải là một số từ 0 đến 9.

Regex sau đây đáp ứng các điều kiện trên và bạn có thể sử dụng nó để xác thực số Thẻ Visa:

^4[0-9]{12}(?:[0-9]{3})?$

Dưới đây là phương pháp Python để xác thực số Thẻ Visa:

import re

def checkVisaCardNo(cardNo):
regex = "^4[0-9]{12}(?:[0-9]{3})?$"
r = re.compile(regex)

if (re.search(r, cardNo)):
print("Valid")
else:
print("Not Valid")

card1 = "4539890694174109"
checkVisaCardNo(card1)

card2 = "49237429498"
checkVisaCardNo(card2)

Một lần nữa, đầu ra xác nhận số đầu tiên hợp lệ trong khi số thứ hai không hợp lệ:

RegEx để xác thực số thẻ American Express

Số thẻ American Express hợp lệ nếu nó đáp ứng các điều kiện sau:

  1. Chuỗi không được chứa bất kỳ ký tự đặc biệt, bảng chữ cái hoặc khoảng trắng nào.
  2. Số ký tự này phải bằng 15.
  3. Chuỗi phải bắt đầu bằng 34 hoặc 37.
  4. 13 chữ số cuối cùng phải là một số từ 0 đến 9.

Regex sau đây đáp ứng các điều kiện trên và bạn có thể sử dụng nó để xác thực số Thẻ American Express:

^3[47][0-9]{13}$

Bạn có thể xác thực số Thẻ American Express bằng mã Python sau:

import re

def checkAmericanExpressCardNo(cardNo):
regex = "^3[47][0-9]{13}$"
r = re.compile(regex)

if (re.search(r, cardNo)):
print("Valid")
else:
print("Not Valid")

card1 = "372831730491196"
checkAmericanExpressCardNo(card1)

card2 = "84732593847743042"
checkAmericanExpressCardNo(card2)

Một lần nữa, kết quả xác nhận số đầu tiên là hợp lệ, nhưng số thứ hai không hợp lệ:

Ứng dụng của Biểu thức chính quy

Bạn có thể sử dụng một số regex khá đơn giản để xác thực các số thẻ tín dụng phổ biến. RegEx là một công cụ mạnh mẽ mà bạn có thể sử dụng để xử lý trước dữ liệu, đối sánh mẫu, trích xuất dữ liệu, phân tích từ vựng, xử lý ngôn ngữ tự nhiên, duyệt web và hơn thế nữa. Bạn cũng có thể sử dụng biểu thức chính quy trong phát triển web để xử lý việc xác thực các biểu mẫu HTML.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *