Tất cả bài viết

Thuật toán Luhn: cách kiểm tra tính đúng đắn của số thẻ

Chữ số cuối cùng trên thẻ thanh toán không phải ngẫu nhiên — đó là chữ số kiểm tra được thiết kế riêng để phát hiện loại lỗi thường gặp khi ai đó gõ tay một dãy số dài vào biểu mẫu thanh toán.

Thuật toán Luhn hoạt động như thế nào

Thuật toán duyệt qua từng chữ số từ phải sang trái, nhân đôi mỗi chữ số thứ hai, và trừ 9 nếu kết quả lớn hơn 9. Nếu số được nhập đúng, tổng tất cả các chữ số thu được sẽ chia hết cho 10.

Phát minh của IBM từ thập niên 1950, không phải của Visa hay Mastercard

Thuật toán mang tên Hans Peter Luhn, nhà khoa học của IBM, người đã đăng ký bằng sáng chế vào năm 1954 như một phương pháp chung để phát hiện lỗi sao chép trong bất kỳ chuỗi số nào — ban đầu không liên quan trực tiếp đến thẻ thanh toán. Các mạng lưới thanh toán sau này áp dụng nó vì chi phí tính toán thấp và phát hiện được hai lỗi thủ công phổ biến nhất: gõ nhầm một chữ số, hoặc đổi chỗ hai chữ số liền kề.

Vì sao vượt qua kiểm tra Luhn không có nghĩa là thẻ tồn tại thật

Kiểm tra Luhn chỉ xác nhận cấu trúc toán học của dãy số, không xác nhận có tài khoản thật đứng sau nó hay không. Có thể tạo ra hàng triệu dãy số vượt qua phép kiểm tra này mà không có số nào gắn với thẻ thật — vì vậy mọi giao dịch thật vẫn phải qua ngân hàng phát hành thẻ để xác minh cuối cùng.

Công dụng của việc này

  • Phát hiện số thẻ nhập sai ngay phía client trước khi gửi biểu mẫu lên server.
  • Nhanh chóng loại bỏ lỗi gõ nhầm rõ ràng khi nhập tay một dãy số dài.
  • Hiểu rõ giới hạn của kiểm tra Luhn — nó chứng minh được điều gì và không chứng minh được điều gì.

Nhận diện mạng lưới thanh toán từ số thẻ (BIN)

Vài chữ số đầu tiên của số thẻ tạo thành BIN (Bank Identification Number), cho biết mạng lưới thanh toán ngay cả trước khi thực hiện kiểm tra Luhn đầy đủ. Số thẻ Visa bắt đầu bằng 4, Mastercard bằng dải 51–55 hoặc dải mới hơn 2221–2720, American Express bằng 34 hoặc 37. Nhờ tiền tố này mà biểu mẫu thanh toán có thể hiện đúng biểu tượng mạng lưới ngay khi người dùng còn đang gõ số thẻ.

Dùng thử công cụ